保持空间:sed处理文本内容行的另一个临时缓冲区,不同的是保持空间内容不会主动清空,也不会主动打印到标准输出,而是需要sed命令来进行处理
模式空间与保持空间的关系
模式空间:相当于流水线,文本行再模式空间中进行处理;
保持空间:相当于仓库,在模式空间对数据进行处理时,可以把数据临时存储到保持空间;作为模式空间的一个辅助临时缓冲区,但又是相互独立,可以进行交互,命令可以寻址模式空间但是不能寻址保持空间。可以使用高级命令h,H,g,G与模式空间进行交互。
d Delete pattern space. Start next cycle.
删除pattern space的内容,开始下一个循环
h H Copy/append pattern space to hold space.
复制/追加pattern space的内容到hold space.(复制会覆盖原内容)
g G Copy/append hold space to pattern space.
复制/追加hold space的内容到pattern space.复制会覆盖原内容)
x Exchange the contents of the hold and pattern
spaces.
交换hold space和pattern space的内容.
下面使用一个实例来验证模式空间和保持空间的关系,以及理解高级命令h,H,g,G的作用
[root@localhost tmp]# cat >> num.txt <<EOF
> One
> Two
> Three
> EOF
[root@localhost tmp]# cat num.txt
One
Two
Three
[root@localhost tmp]#
[root@localhost tmp]# tac num.txt
Three
Two
One
[root@localhost tmp]#
使用sed来将num.txt文本的内容按照倒叙输出
实现的命令如下:
[root@localhost tmp]# sed ‘1!G;h;$!d‘ num.txt
Three
Two
One
[root@localhost tmp]#
注释:1!G:第一行不执行G命令
$!d:最后一行不执行d命令,即不删除模式空间一行
原理图:
总结模式空间与保持空间关系
保持空间是模式空间一个临时存放数据的缓冲区,协助模式空间进行数据处理
原文地址:http://blog.51cto.com/13691477/2113141