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之模式空间与保持空间的主要内容,如果未能解决你的问题,请参考以下文章

linux12shell编程 --> 三剑客之sed命令

三剑客之sed

shell三剑客之sed

文本处理三剑客之-sed高级用法

linux三剑客之sed入门详解

打开高效文本编辑之门_Linux sed之模式空间与保留空间