Content #
就跟打印数据流的结尾一样,删除数据流结尾的空行也得花点儿心思:利用循环来实现。
sed '{
:start
/^\n*$/{$d; N; b start }
}'
乍一看可能有点儿怪,在正常的脚本花括号内还有花括号。但这可以在整个命令脚本中将部分命令分组。命令分组会被应用于指定的地址模式。该地址模式能够匹配只含一个换行符的行。如果找到了这样的行,而且还是最后一行,删除命令就会将它删除。如果不是最后一行,那么N命令会将下一行附加到它后面,然后分支命令会跳到循环起始位置重新开始。
下面是脚本的实际运行效果:
$ cat data10.txt
Line one.
Line two.
$
$ sed '{
> :start
> /^\n*$/{$d; N; b start}
> }' data10.txt
Line one.
Line two.
$
From #
Linux命令行与shell脚本编程大全