一个命令中包含两个 sed 命令

一个命令中包含两个 sed 命令

我有一个包含很多名称等的文件,并且名称之间有空格。现在,我想用 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仅打印非空格和非空白行,同时修剪所有尾随空格。

相关内容