一、sed编辑器介绍
sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反。在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式插入、删除或替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中(即脚本文件)。sed编辑器会执行下列操作:
- 依次从输入中读取一行数据
- 根据所提供的编辑器命令匹配数据
- 按照命令修改流中的数据
- 将新的输数据输出到STDOUT
在流编辑器将所有命令与一行数据匹配完毕后,它会读取下一行数据并重复这个过程,直至处理完所有数据后终止。
sed命令的格式如下
sed options script file |
二、sed删除空白行
说明:在使用之前假设读者有基本的正则知识,如果没有,请自行学习
1. 删除连续的空白行
如果我们的文本各行之间有不定数量的空白行,阅读起来颇有些费力,且不美观,我们希望各行之间间隔是固定的,比如仅有一行空白行的间隔,我们可以用到下面脚本:
/./ , /^$/!d |
区间/./到/^$/的开始抵制会匹配任何含有至少一个字符的行,区间的结束地址会匹配一个空行,在这个区间的行不会被删除。
实例
~$ cat example1
Such stories set us thinking,
wondering what we should do under similar circumstances.
What events, what experiences,
what associations should we crowd into those last hours as mortal beings,
what regrets?
~$ sed '/./,/^$/!d' example1
Such stories set us thinking,
wondering what we should do under similar circumstances.
What events, what experiences,
what associations should we crowd into those last hours as mortal beings,
what regrets?
~$
原来不规则的空白行变得均匀了。该示例中最后一行之后无内容,如果最后一行文字之后还有空白行,处理之后一会显示一行空白行。
2. 删除开头的空白行
如果一段文本中开头有多行空白,显然会给阅读带来不便。删除开头的空白行与上面思路比较相似,我们可以用到下面脚本:
<