如何修剪文本文件的内容?

如何修剪文本文件的内容?

我想删除文本文件开头和结尾处的所有“空白”字符,包括 \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

相关内容