10.3.10 高级替换

上面介绍了几个常用的sed命令,并逐个进行了演示。但是在实践中,往往由于需求复杂而无法简单满足。这里将介绍一些不太常用的高级编辑命令供读者参考。

·替换匹配行的下一行

想要修改匹配行的下一行的文本,就需要使用n命令了。该命令的作用在于读取匹配行的下一行,然后再用n命令后的编辑指令来处理该行。在下面的Sed.txt文件中有一行空白行,现在想将该空格行的下一行中的line改为LINE,而文本中其他部分保持不变,操作如下:


  1. [root@localhost ~]# sed '^${n;s/line/LINE/g}' Sed.txt
  2. this is line 1, this is First line
  3. this is line 2, the Second line, Empty line followed
  4. this is LINE 4, this is Third LINE
  5. this is line 5, this is Fifth line

·将模式空间的内容放入存储空间以便于接下来的编辑

实现该功能,就要引入H/h/G/g这4个命令了,这几个命令都是用于模式空间和存储空间转换的。首先来解释一下两个新出现的词的含义。

模式空间:当前输入行的缓冲区。

存储空间:模式空间以外的一个预留缓冲区。

下面来看看H/h/G/g这4个命令的具体含义:

·H:将模式空间的内容追加到存储空间。

·h:将模式空间的内容复制到存储空间,覆盖原有存储空间。

·G:将存储空间的内容追加到模式空间。

·g:将存储空间的内容复制到模式空间。

以下是相应的示例:


  1. #Sed2.txt
  2. 文件内容
  3. [root@localhost ~]# cat Sed2.txt
  4. a
  5. b
  6. aa
  7. bb
  8. #
  9. 实现第一行与第二行以及第三行与第四行的反转
  10. [root@e-bai ~]# sed 'a{h;d};/b/G' Sed2.txt
  11. b
  12. a
  13. bb
  14. aa