zoukankan      html  css  js  c++  java
  • sed高级用法:模式空间(pattern space)和保持空间(hold space)


     摘自:https://blog.csdn.net/ITsenlin/article/details/21129405

    sed高级用法:模式空间(pattern space)和保持空间(hold space)

    环境:centos 6.4 

    sed版本:sed-4.2.1-10.el6.x86_64


    前面的基本用法已经可以满足90%的需要,人个认为想要真正掌握sed,还需要学习一下sed的高级用法,本节就详细讲解一下sed的模式空间和保持空间


    前面基本用法中也有提到模式空间,即为处理文件中一行内容的一个临时缓冲区。处理完一行之后就会把模式空间中的内容打印到标准输出,然后自动清空缓存。

    而这里说的保持空间是sed中的另外一个缓冲区,此缓冲区正如其名,不会自动清空,但也不会主动把此缓冲区中的内容打印到标准输出中。而是需要以下sed命令进行处理:

    •       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的内容.

    下面以一个例子来说明上面命令的用法,例如有一个文件,我们可以用tac命令反序打印出文件的内容,其实用sed的话也可以实现,这里先将结果列出,再详细讲解


    不错就是一行命令就可实现:

    sed '1!G;h;$!d' file

    通过下面的讲解大家可以了解到sed的处理机制以及处理过程:

    说明:

    • 第一行左边为文件内容,箭头所指为sed当前处理的行,右侧为sed命令;
    • 后面三行左侧绿色为模式空间内容,右侧蓝色为保持空间内容。
    • 每次sed只读取文件中一行到模式空间,即每次执行sed命令前,模式空间中只有文件中当前处理行内容,这一点没有在图中表现。
    • 每一行表示一个命令处理完后两个空间中的内容

    困为每一步骤都很清楚,所以只把执行的结果以图形表示,不做说明,可以对照前面对sed命令的说明,以加深理解

    1,读取文件的行一行"First"进行处理,最后一个命令将模式空间内容删除,所以不会在屏幕上打印内容


    2,读取第二行“Sencond”进行处理,最后一个命令将模式空间内容删除,所以不会在屏幕上打印内容


    3,读取第三行“three”进行处理,注意sed处理完之后会把,会把模式空间中内容打印到屏幕并自动清空模式空间(这个没在图中表现)



    其实这个功能还可以用下面命令实现:

    sed -n '1!G;h;$p' file
    说明:

    -n: 表示不输出sed的处理结果,而想要输出,则需要要显示的用“p”命令


    其实sed的高级命令还有几个,可以分为三组,后续有机会再学习其他两组命令:

    1.   处理多行模式空间(N、D、P)。
    2.   采用保持空间来保存模式空间的内容并使它可用于后续的命令(H、h、G、g、x)。
    3.   编写使用分支和条件指令的脚本来更改控制流(:、b、t)。

  • 相关阅读:
    2016级算法第四次上机-B ModricWang的序列问题
    2016级算法第四次上机-A.Bamboo 和人工zz
    2016级算法第三次上机-G.Winter is coming
    2016级算法第三次上机-F.ModricWang的导弹防御系统
    2016级算法第三次上机-E.ModricWang's Polygons
    2016级算法第三次上机-D.双十一的抉择
    2016级算法第三次上机-C.AlvinZH的奇幻猜想——三次方
    2016级算法第三次上机-B.Bamboo和巧克力工厂
    2016级算法第三次上机-A.Bamboo的小吃街
    Self-introduction 自我介绍
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/9710481.html
Copyright © 2011-2022 走看看