【Linux】sed编辑器二
一、处理多行命令sed编辑器有3种可用于处理多行文本的特殊命令。
[*]N:参加数据流中的下一行,创建一个多行组进行处理;
[*]D:删除多行组中的一行;
[*]P:打印多行组中的一行。
1、next命令:N
单行next命令
单行next(n)命令会告诉sed编辑器移动到数据流中的下一行,不消再返回到命令列表的最开始位置。通常sed编辑器在移动到数据流中的下一行之前,会在当前行中实行完全部定义好的命令,而单行next命令却不一样。
如下所示,文本test.txt中有两行空行。
https://i-blog.csdnimg.cn/direct/4005b8f690104dd7ab403f47c010a77a.png
我们想只删除第一行空行,实行下面的命令却无法做到,它会将两行空行都删除掉。
sed '/^$/d' test.txt https://i-blog.csdnimg.cn/direct/d296d3efd5284d65baec78b0750f7df8.png
可以用单行next命令解决此题目:
sed '/成都/{n ; d}' test.txt # d表示删除 先用脚本查找到含有“成都”的那一行,然后,单行next命令(n)会让sed编辑器移动到文本的下一行,也就是我们想要删除的空行,接着,sed编辑器继续实行命令列表中的命令,即使用删除命令(d) 删除空行。sed编辑器在实行完命令脚本后会读取数据流中的下一行文本,并从头开始实行脚本,但它却找不到包含“成都”的行了,以是就不会再删除别的行。
https://i-blog.csdnimg.cn/direct/c276d90a4a0a406d90e4ca84ae3ab025.png
合并文本行
单行next(n)命令会将数据流中的下一行移入sed编辑器的工作空间(模式空间)。多行版本的next(N)命令则是将下一行添加到模式空间中已有文本之后。如许就会将数据流中的两行文本合并到同一个模式空间中,文本行之间仍然用换行符分隔,但sed编辑器会将两行文本当成一行来处理。
sed '/重庆/{N ; s/\n/ / }' test.txt sed编辑器首先找到含有“重庆”的行,找到后,使用N命令将下一行与该行合并,接着使用替换命令s将换行符(\n)替换成空格。如此一来,两行文本就会成为一行后输出。
https://i-blog.csdnimg.cn/direct/4c3f2577abe64539b6f51df27b38b041.png
在数据文件中找到一个大概会分散在两行中的文本短语。
如下所示,电信和诈骗园区之间的 . 是用来匹配空格和换行符的,但如果它匹配到了换行符,就会删掉换行符,从而导致两行合并成一行。
https://i-blog.csdnimg.cn/direct/5f98818ff3154043b3fb0f7ba07cb6ff.png
可以使用两个替换命令解决上面两行合并成一行的题目。
第一个替换命令用来处理短语出如今单行中的环境,第二个替换命令用来处理短语出如今多行中的环境。
https://i-blog.csdnimg.cn/direct/1350a9ab1b014a52883f4e84ecd465dc.png
2、多行删除命令:D
sed编辑器中的多行删除命令(D)只会删除模式空间中的第一行,即删除该行中的换行符及其之间的全部字符。
https://i-blog.csdnimg.cn/direct/d34bdc64dfdc4cbbbc4bfc6ca66761cf.png
删除目标数据字符串所在行的前一行。
sed '/^$/{N ; /缅北/D}' test.txt sed编辑器首先会查找空行,然后用N命令将下一行参加模式空间,如果模式空间中有含有“缅北”的词语,那么D命令就会删除模式空间中的第一行。
https://i-blog.csdnimg.cn/direct/6d67b5711f654d208e01e20b491e3e13.png
3、多行打印命令:P
多行打印命令(P)只打印模式空间中的第一行,即打印模式空间中的换行符及其之前全部字符。当用-n选项来克制脚本输出时,它就和表现文本的单行p命令的用法差不多。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]