您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

Linux sed 多行处理详细

添加时间:2017-5-25 18:59:20  添加: 思海网络 

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

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

还有几个命令参数:

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

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


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

执行如下命令:


1
2
3
4
[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\n1-line;
    3. 执行h命令,此时暂存空间的内容是2-line\n1-line;
    4. 执行d命令,模式空间被清空
  3. 扫描到第三行
    1. 将3-line放入模式空间,
    2. 执行G命令,将暂存空间的2-line\n1-line添加到模式空间3-line的后面,此时模式空间是3-line\n2-line\n1-line;
    3. 执行h命令,此时暂存空间的内容是3-line\n2-line\n1-line;
    4. 不执行$!d;
  4. 直接输出 3-line\n2-line\n1-line

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

 

关键字:Linux、sed、缓存数据

分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站