ITPub博客

首页 > Linux操作系统 > Linux操作系统 > sed ‘1!G;h;$!d’解析

sed ‘1!G;h;$!d’解析

原创 Linux操作系统 作者:wang_0720 时间:2014-09-22 10:15:35 0 删除 编辑

1 sed简介

sed是面向流的行编辑器。所谓面向流,是指接受标准输入的输入,输出内容到标准输出上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。

具体过程如下: sed将处理的行读入到一个临时缓存区中(也称为模式空间pattern space),sed中的命令依次执行,直到所有命令执行完毕,完成后把该行发送到屏幕上,清理pattern space中的内容;接着重复刚才的动作,读入下一行,直到文件处理结束。

sed每处理完一行就将其从pattern space中删除,然后将下一行读入,进行处理和显示。处理完输入 文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

2 sed执行流程图


3 什么是Pattern Space,Hold Space

Pattern Space相当于车间,sed把流内容在这里进行处理,Hold Space相当于仓库,加工的半成品在这里进行临时存储。

由于各种原因,比如用户希望在某个条件下脚本中的某个命令被执行,或者希望模式空间得到保存以便下一次处理,都有可能使得sed在处理文件的时候不按照正常的流程来进行。这个时候,sed设置了一些高级命令来满足用户的要求。

一些高级命令

g: hold space中的内容拷贝到pattern space中,原来pattern space里的内容被覆盖

G:将hold space中的内容appendpattern space\n

h: pattern space中的内容拷贝到hold space中,原来hold space里的内容被覆盖

H: pattern space中的内容appendhold space\n

d: 删除pattern中的所有行,并读入下一新行到pattern

D: 删除multiline pattern中的第一行,不读入下一行

4 图解sed ‘1!G;h;$!d’ file

1!G 第一行不执行G命令,从第二行开始执行

$!d 最后一行不删除

[root@localhost test]# cat file

1 1 1

2 2 2

3 3 3

 

[root@localhost test]# sed '1!G;h;$!d' file

3 3 3

2 2 2

1 1 1

图中P代表Pattern Space,H代表Hold Space。绿色代表pattern space中的数据,蓝色代表hold space中的数据。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27181165/viewspace-1276719/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-11-05

  • 博文量
    111
  • 访问量
    926824