我想删除文本文件开头和结尾处的所有“空白”字符,包括 \n(如果存在)。 (如果“文件”是一个大字符串,则基本上模仿大多数编程语言的trim()函数的行为)。
答案1
使用sed
:
sed -z 's/^\s*//; s/\s*$//' infile
s/^\s*//
,在infile
作为输入文件时删除空格/空行。s/\s*$//
infile
,删除了作为输入文件最\n
末尾的空格/空行,包括infile
.
例子cat -e infile
:
$
$
$
Three blank lines above$
$
$
Two blank lines in the middle$
a blank lines below$
$
a line with trailing whitespaces $
a line with leading whitespaces$
below are two empty lines + one whitespaces then an empty line again$
$
$
$
$
输出:
Three blank lines above
Two blank lines in the middle
a blank lines below
a line with trailing whitespaces
a line with leading whitespaces
below are two empty lines + one whitespaces then an empty line again
或者,您可以使用printf
打印sed
删除第一个空格/空行的结果,并在仅在最后删除空行的命令替换中使用它\n
。
printf '%s' "$(sed -z 's/^\s*//' infile)"
答案2
假设你想删除全部空格和换行符,不仅仅是最后一个换行符,您可以使用tr
:
tr -d '[[:space:]]' < file > file.trimmed
或者,更准确地说:
tr -d '\t\n ' < file > file.trimmed
答案3
假设您想删除前导/尾随空格对于每行而不是整个文件。
一个测试文件,其中某些行具有前导或尾随空格以及空行:
$ cat -e file
line 1$
line 2$
line 3 has trailing spaces $
$
blank line above$
和一个 GNU sed 命令来进行修剪
$ sed -r 's/^\s+//; s/\s+$//; /^$/d' file | cat -e
line 1$
line 2$
line 3 has trailing spaces$
blank line above$
答案4
您可以尝试使用 ed ,不幸的是它没有出现在 debian 的标准安装中。
printf '%s\n' \
'g/[^[:blank:]][^[:blank:]]*/kx' \
"'"'x,$j' \
'$s/[[:blank:]]*$//' \
'/[^[:blank:]][^[:blank:]]*/kx' \
'1,'"'"'xj' \
'1s/^[[:blank:]]*//' \
'wq' |
ed -s infile
或者使用 gnu sed
sed -Ezi 's/^\s+|\s+$//g;s/$/\n/' infile