码迷,mamicode.com
首页 > 系统相关 > 详细

linux三剑客sed之模式空间与保持空间

时间:2018-05-06 10:32:39      阅读:228      评论:0      收藏:0      [点我收藏+]

标签: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的作用

[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命令,即不删除模式空间一行

原理图:

技术分享图片


总结模式空间与保持空间关系
保持空间是模式空间一个临时存放数据的缓冲区,协助模式空间进行数据处理

linux三剑客sed之模式空间与保持空间

标签:linux   sed   三剑客   模式空间   保持空间   

原文地址:http://blog.51cto.com/13691477/2113141

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!