zoukankan      html  css  js  c++  java
  • sed 多行处理详细总结

    在正常情况下,sed将待处理的行读入模式空间,脚本中的命令就一条接着一条的对该行进行处理,直到脚本执行完毕,然后该行被输出,模式空间请空;然后重复刚才的动作,文件中的新的一行被读入,直到文件处理完备。但是,各种各样的原因,比如用户希望在某个条件下脚本中的某个命令被执行,或者希望模式空间得到保留以便下一次的处理,都有可能使得sed在处理文件的时候不按照正常的流程来进行。这个时候,sed设置了一些高级命令来满足用户的要求。如果想要学习sed的高级命令,首先要了解如下两个缓存区:

    • 模式空间(pattern space)的定义:模式空间就是一个缓存区,保存sed刚刚从输入端读取的。
    • 暂存空间(hold space)的定义:暂存空间就是在处理模式空间数据的时候,临时缓存数据用的。

    还有几个命令参数:

    g: 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除
    G: 将hold space中的内容append到pattern space
    后
    h: 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除
    H: 将pattern space中的内容append到hold space
    后
    x: 交换pattern space和hold space的内容

    比如咱们想要倒排一个文件的内容,文件如下:

    [qiu.li@l-tdata1.tkt.cn6 ~]$ cat tmp 
      1-line
      2-line
      3-line
    

    执行如下命令:

    [qiu.li@l-tdata1.tkt.cn6 ~]$ sed '2,$G;h;$!d' tmp
      3-line
      2-line
      1-line

    下面咱们逐步理解上面的执行过程

    一、让咱们来分析一下如下三条命令:

    • 2,$G:从第二行到最后一行执行G命令
    • h:执行h命令
    • $!d:删除除了最后一行的所有行

    二、具体的操作

    1. 扫描到第一行
      1. 将1-line放入模式空间;此时模式空间还是1-line;
      2. 直接执行h命令,此时暂存空间是1-line;
      3. 执行d命令,删除了模式空间仅有的一行数据,删除之后,模式空间是空的
    2. 扫描到第二行
      1. 将2-line放入模式空间
      2. 执行G命令,将暂存空间的1-line添加到模式空间2-line的后面,此时模式空间是2-line 1-line;
      3. 执行h命令,此时暂存空间的内容是2-line 1-line;
      4. 执行d命令,模式空间被清空
    3. 扫描到第三行
      1. 将3-line放入模式空间,
      2. 执行G命令,将暂存空间的2-line 1-line添加到模式空间3-line的后面,此时模式空间是3-line 2-line 1-line;
      3. 执行h命令,此时暂存空间的内容是3-line 2-line 1-line;
      4. 不执行$!d;
    4. 直接输出 3-line 2-line 1-line

     当然,命令:sed '1!G;h;$!d' tmp 也能有这个效果。

  • 相关阅读:
    解决xcode5升级后,Undefined symbols for architecture arm64:问题
    第8章 Foundation Kit介绍
    app 之间发送文件 ios
    iphone怎么检测屏幕是否被点亮 (用UIApplication的Delegate)
    CRM下载对象一直处于Wait状态的原因
    错误消息Customer classification does not exist when downloading
    How to resolve error message Distribution channel is not allowed for sales
    ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼
    有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中
    SAP GUI和Windows注册表
  • 原文地址:https://www.cnblogs.com/liqiu/p/4507762.html
Copyright © 2011-2022 走看看