我有一个包含很多名称等的文件,并且名称之间有空格。现在,我想用 sed 删除该文件中的所有尾随空格和所有空行。
我有两个命令可以完成此任务,但我希望将两者结合使用:
sed -i's/\s*$//g'
sed -i'/^$/d'
答案1
使用 GNU sed
(可能还有其他),您可以给出用分号分隔的多个命令:
sed -i 's/\s*$//g; /^$/d'
其他sed
实现可能需要您分别使用以下命令给出两个命令-e
:
sed -i -e 's/\s*$//g' -e '/^$/d'
最后,您还可以将它们组合成一个sed
脚本:
$ cat foo.sed
s/\s*$//g
/^$/d
然后,您可以使用以下命令运行它-f
:
$ sed -i -f foo.sed file
答案2
这是您正在寻找的命令:
sed -ne '/[^ ]/s/ *$//p' <in >out
...对于至少匹配 1 个非空格字符的行,sed
将替换行尾部可以由 0 个或多个尾随空格组成的最长匹配。如果成功的话(而且永远都是这样,因为永远不会缺少任何东西),线路被p
打印。
结果是该命令p
仅打印非空格和非空白行,同时修剪所有尾随空格。