sed语法格式
sed执行模板 = sed ‘模式{命令1;命令2}’ 文件,即逐行读入模式空间,执行命令,最后输出打印出来。
sed的语法格式:
sed [option] 'pattern{sed-command1;sed-command2}' {
input-file}
sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中的“sed-command(sed命令)”就一条接着一条进行处理,直到脚本执行完毕,然后该行被输出,模式(pattern space)被清空。接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕。
N命令
Next 命令(N):将数据流中的下一行加进来创建一个多行组来处理。
多行Next(N)命令通过读取新的输入行,并将它添加到模式空间的现有内容之后来创建多行模式空间。模式空间最初的内容和新的输入行之间用换行符分隔。在模式空间中嵌入的换行符可以利用转义序列“\n”来匹配。在多行模式空间中,元字符“^”匹配空间中的第一个字条,而不匹配换行符后面的字符。同样,“$”只匹配模式空间中最后的换行符,而不匹配任何嵌入的换行符。在执行next命令之后,控制将被传递给脚本中的后续命令。
Next命令于next命令不同,next输出模式空间的内容,然后读取新的输入行,next命令不能创建多行模式空间。
实例:
如果要将”Look at your mother“改成 一行的内容,但是他在文件的前两行上
[root@localhost ~]# cat tests
Look at
your mother
我们可以使用装逼语法直接实现
[root@localhost ~]# sed '/Look/{N;s/\n//}' tests
Look at your mother
在这个例子中,sed 命令查找含有单词 Look的那行文本。找到该行后,它会用 N 命令将下一行合并到那行,然后用替换命令 s 将换行符替换成空。
D命令
D命令是删除当前模式空间开端至\n的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed。.
例子:
编写一个实现查找一系列空行并输出单个空行的脚本,以看看它们之间的区别。
[root@localhost ~]# cat tests
This is 1
This is 2
This is 3
This is 4
This is