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$
开始的时候会读取一行,存在模式空间中,内容是1n
N;这个命令会从输入文件在读取一行追加到模式空间中去,此时模式空间是1n2n
l;明确方式打印出模式空间的内容
D;将模式空间的内容删除到第一个换行符。保留了2。
继续下面的循环