删除连续的空白行,删除开头的空白行,删除结尾的空白行
程序员文章站
2022-03-03 23:07:25
...
删除连续的空白行
删除连续空白行的关键在于创建包含一个非空白行和一个空白行的地址区间。如果sed编辑
器遇到了这个区间,它不会删除行。但对于不匹配这个区间的行(两个或更多的空白行),它会
删除这些行。
sed '/./,/^$/!d' data.txt
删除开头的空白行
sed '/./,$!d' data.txt
这个脚本用地址区间来决定哪些行要删掉。这个区间从含有字符的行开始,一直到数据流结
束。在这个区间内的任何行都不会从输出中删除。这意味着含有字符的第一行之前的任何行都会删除。
删除结尾的空白行
很遗憾,删除结尾的空白行并不像删除开头的空白行那么容易。就跟打印数据流的结尾一样,删除数据流结尾的空白行也需要花点心思,利用循环来实现。
在开始讨论前,先看看脚本是什么样的。
sed '{
:start
/^\n*$/{$d; N; b start }
}'
可能乍一看有点奇怪。注意,在正常脚本的花括号里还有花括号。这允许你在整个命令脚本
中将一些命令分组。该命令组会被应用在指定的地址模式上。地址模式能够匹配只含有一个换行符的行。如果找到了这样的行,而且还是最后一行,删除命令会删掉它。如果不是最后一行,N命令会将下一行附加到它后面,分支命令会跳到循环起始位置重新开始。
下面是实际的脚本。
$ cat data.txt
This is the first line.
This is the second line.
$ sed '{
> :start
> /^\n*$/{$d ; N ; b start }
> }' data.txt
This is the first line.
This is the second line.
$
这个脚本成功删除了文本文件结尾的空白行。