【Linux】sed编辑器二

打印 上一主题 下一主题

主题 1023|帖子 1023|积分 3069

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、处理多行命令

sed编辑器有3种可用于处理多行文本的特殊命令。


  • N:参加数据流中的下一行,创建一个多行组进行处理;
  • D:删除多行组中的一行;
  • P:打印多行组中的一行。
1、next命令:N

单行next命令

单行next(n)命令会告诉sed编辑器移动到数据流中的下一行,不消再返回到命令列表的最开始位置。通常sed编辑器在移动到数据流中的下一行之前,会在当前行中实行完全部定义好的命令,而单行next命令却不一样。
如下所示,文本test.txt中有两行空行。

 我们想只删除第一行空行,实行下面的命令却无法做到,它会将两行空行都删除掉。
  1. sed '/^$/d' test.txt
复制代码

可以用单行next命令解决此题目:
  1. sed '/成都/{n ; d}' test.txt # d表示删除
复制代码
先用脚本查找到含有“成都”的那一行,然后,单行next命令(n)会让sed编辑器移动到文本的下一行,也就是我们想要删除的空行,接着,sed编辑器继续实行命令列表中的命令,即使用删除命令(d) 删除空行。sed编辑器在实行完命令脚本后会读取数据流中的下一行文本,并从头开始实行脚本,但它却找不到包含“成都”的行了,以是就不会再删除别的行。

 合并文本行

单行next(n)命令会将数据流中的下一行移入sed编辑器的工作空间(模式空间)。多行版本的next(N)命令则是将下一行添加到模式空间中已有文本之后。如许就会将数据流中的两行文本合并到同一个模式空间中,文本行之间仍然用换行符分隔,但sed编辑器会将两行文本当成一行来处理。
  1. sed '/重庆/{N ; s/\n/ / }' test.txt
复制代码
sed编辑器首先找到含有“重庆”的行,找到后,使用N命令将下一行与该行合并,接着使用替换命令s将换行符(\n)替换成空格。如此一来,两行文本就会成为一行后输出。 

在数据文件中找到一个大概会分散在两行中的文本短语。
如下所示,电信和诈骗园区之间的 . 是用来匹配空格和换行符的,但如果它匹配到了换行符,就会删掉换行符,从而导致两行合并成一行。

可以使用两个替换命令解决上面两行合并成一行的题目。
第一个替换命令用来处理短语出如今单行中的环境,第二个替换命令用来处理短语出如今多行中的环境。

2、多行删除命令:D

 sed编辑器中的多行删除命令(D)只会删除模式空间中的第一行,即删除该行中的换行符及其之间的全部字符。

删除目标数据字符串所在行的前一行。
  1. sed '/^$/{N ; /缅北/D}' test.txt
复制代码
sed编辑器首先会查找空行,然后用N命令将下一行参加模式空间,如果模式空间中有含有“缅北”的词语,那么D命令就会删除模式空间中的第一行。 


3、多行打印命令:P

多行打印命令(P)只打印模式空间中的第一行,即打印模式空间中的换行符及其之前全部字符。当用-n选项来克制脚本输出时,它就和表现文本的单行p命令的用法差不多。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表