sed的基本用法(2)

sed的其他命令

=的意思是显示行号

sed '\^zz\{=}' bb

 

n:读取下一行,用下一个命令处理新的行。在上节课我们讲到,sed会把一行内容读取到模式空间,然后使用命令进行操作,操作完成之后,会把模式空间里面的内容实现到屏幕上。然后清空模式空间,在读取下一行内容到模式空间。

但有的时候,我们需要匹配一行内容,然后对匹配的下一行进行操作

sed '/^zz/{n;s/tom/TOM/g}' cc整个命令的意思是首先匹配以zz开头的行,匹配之后sed会把当前模式空间里面的内容(zz开头的那行)删除,然后读取下一行的内容,然后利用n后面的内容对当前模式空间内容进行操作。

 

sed 's/rhce/RHCE' cc这个命令是把整个文件中以rhce为单词的全部替换成RHCE的单词。

这个命令是把所有的rhce全部换成RHCA。但是我们看见第一行最后有个rh,第二行的开头有ce,因为这个rhce被分成了两行,所以刚才的那个命令就没有把这个分开的rhce换成RHCA。如果现在需要把这分开成两行的rhce也替换成RHCA的话,就需要N,N是多模式空间,意思是说,当sed读取第一行的时候,遇到了N,然后会把下一行的内容读取到模式空间,而原来模式空间里面的内容是不删除的,只是把新的一行内容附加到模式空间。

上面的命令只是替换行末rh和第二行ce变成了RHCA。

如果我们使用多行模式空间的话,^就不是表示行的开头了,而是模式空间里面的开头。$就表示模式空间的结束。

aa内容如上图所示:

从上图我们可以看见替换的仅仅是模式空间的开头rhce,而并不是每行的开头。

同理:sed '{N;s/rhca$/XXX/}' aa;这个命令里面替换的是模式空间最后的rhca,而不是每行最后的rhca。

 

除了模式空间之外,还有保持空间,我们可以把它理解是一个缓存。

当我们对模式空间里面的内容操作的时候,如果相对模式空间里面的内容保存一个副本的话,那么我们可以把模式空间里面的内容存储在保持空间里面,保持空间的内容和模式空间的内容是可以互换的。使用的命令是h(H)、g(G),h(H)是把模式空间内容存储到保持空间,g(G)的意思是把保持空间里面的内容存储在模式空间里。

我们现在想把bb文件内容变成:

b

a

bb

aa

我们可以这样做:

这句命令的意思是:查找包含a的行,然后把a、aa复制到保持空间里面去,然后删除模式空间里面的a、aa,此时模式空间就为b、bb。/b/{G}的意思是在模式空间中查找包含b的行,然后把保持空间中的内容追加到模式空间中。匹配到b的时候拿一行过来(a),追加到b后面。匹配到bb的时候在拿一行过来(aa),追加到bb后面。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值