sed的基本用法(2)

来源:互联网 发布:js复制内容到剪贴板 编辑:程序博客网 时间:2024/05/12 18:51

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
原创粉丝点击