10.3.10 高级替换
上面介绍了几个常用的sed命令,并逐个进行了演示。但是在实践中,往往由于需求复杂而无法简单满足。这里将介绍一些不太常用的高级编辑命令供读者参考。
·替换匹配行的下一行
想要修改匹配行的下一行的文本,就需要使用n命令了。该命令的作用在于读取匹配行的下一行,然后再用n命令后的编辑指令来处理该行。在下面的Sed.txt文件中有一行空白行,现在想将该空格行的下一行中的line改为LINE,而文本中其他部分保持不变,操作如下:
- [root@localhost ~]# sed '^${n;s/line/LINE/g}' Sed.txt
- this is line 1, this is First line
- this is line 2, the Second line, Empty line followed
- this is LINE 4, this is Third LINE
- this is line 5, this is Fifth line
·将模式空间的内容放入存储空间以便于接下来的编辑
实现该功能,就要引入H/h/G/g这4个命令了,这几个命令都是用于模式空间和存储空间转换的。首先来解释一下两个新出现的词的含义。
模式空间:当前输入行的缓冲区。
存储空间:模式空间以外的一个预留缓冲区。
下面来看看H/h/G/g这4个命令的具体含义:
·H:将模式空间的内容追加到存储空间。
·h:将模式空间的内容复制到存储空间,覆盖原有存储空间。
·G:将存储空间的内容追加到模式空间。
·g:将存储空间的内容复制到模式空间。
以下是相应的示例:
- #Sed2.txt
- 文件内容
- [root@localhost ~]# cat Sed2.txt
- a
- b
- aa
- bb
- #
- 实现第一行与第二行以及第三行与第四行的反转
- [root@e-bai ~]# sed 'a{h;d};/b/G' Sed2.txt
- b
- a
- bb
- aa