06 高级sed

6.1 sed是如何工作的

SED维护两个数据缓冲区:活动模式空间和辅助保持空间。两者最初都是空的。

sed通过对输入的每一行执行以下循环:第一,sed读取输入流中的一行,删除任何换行,和地方它在模式空间。然后执行命令;每个命令都可以有一个与之相关联的地址:地址是一种条件代码,如果在执行命令之前验证条件,则只执行命令。

当脚本结束,除非是在使用-n选项,模式空间的内容打印到输出流,重新加入换行如果它被删除。7再下一个周期开始为下一个输入行。

除非使用特殊命令(如“D”),否则模式空间将在两个周期之间删除。另一方面,保持空间将数据保存在循环之间(见命令“H”、“h”、“x”、“G”、“G”以便在两个缓冲区之间移动数据)。

6.2 2个模式的交换

d

从模式空间删除行,直到第一个换行符,并重新启动循环。

G

将保留空间的行追加到模式空间,并在其之前换行。

H

将模式空间中的行追加到保存空间中,并在其之前换行。

N

将输入文件中的行附加到模式空间。

P

从模式空间打印行,直到第一个换行符。

样例:

[root@centos74 ~]$ seq 6 | sed -n 'N;l;D'
1\n2$
2\n3$
3\n4$
4\n5$
5\n6$
  1. 开始的时候会读取一行,存在模式空间中,内容是1n

  2. N;这个命令会从输入文件在读取一行追加到模式空间中去,此时模式空间是1n2n

  3. l;明确方式打印出模式空间的内容

  4. D;将模式空间的内容删除到第一个换行符。保留了2。

  5. 继续下面的循环