linux三剑客sed之模式空间与保持空间
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux三剑客sed之模式空间与保持空间相关的知识,希望对你有一定的参考价值。
pattern space(模式空间) and hold space (保持空间)
(H、h、G、g、x)
模式空间:sed处理文本内容行的一个临时缓冲区,模式空间中的内容会主动打印到标准输出,并自动清空模式空间
保持空间: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的作用
[[email protected] tmp]# cat >> num.txt <<EOF
> One
> Two
> Three
> EOF
[[email protected] tmp]# cat num.txt
One
Two
Three
[[email protected] tmp]#
[[email protected] tmp]# tac num.txt
Three
Two
One
[[email protected] tmp]#
使用sed来将num.txt文本的内容按照倒叙输出
实现的命令如下:
[[email protected] tmp]# sed ‘1!G;h;$!d‘ num.txt
Three
Two
One
[[email protected] tmp]#
注释:1!G:第一行不执行G命令
$!d:最后一行不执行d命令,即不删除模式空间一行
原理图:
总结模式空间与保持空间关系
保持空间是模式空间一个临时存放数据的缓冲区,协助模式空间进行数据处理
以上是关于linux三剑客sed之模式空间与保持空间的主要内容,如果未能解决你的问题,请参考以下文章