前言

作者不善言谈,如有错误请指正!!!

转载请注明出处!!!

sed之G、H、g、h使用

什么是sed?

sed是面向流的行编辑器,所谓面向流,是指接受标准输入的输入,输出内容到标准输出上。

sed如何处理数据?

sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中的“sed-command(sed命令)”就一条接着一条进行处理,知道脚本执行完毕。然后该行呗输出,模式(pattern space)被清空;接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕。

什么是Pattern Space,什么是Hold Space?

pattern space相当于车间sed把流内容在这里处理。

hold space相当于仓库,加工的半成品在这里临时储存。

PS:你可以将pattern space看成是一个流水线,所有的动作都是在“流水线”上执行的;而hold space是一个“仓库”,“流水线”上的东东都可以放到这里。

为什么要使用sed高级命令(G、H、g、h、n、N、x)?

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

sed命令:

+ g:[address[,address]]g 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除

+ G:[address[,address]]G 将hold space中的内容append到pattern space\n后

+ h:[address[,address]]h 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除

+ H:[address[,address]]H 将pattern space中的内容append到hold space\n后

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

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

PS:不论是使用G、g还是H、h,它们都是将hold space里面的内容“copy”到pattern space中或者将pattern space中的内容“copy”到hold space中。

附上英文的解释(注意其中的高亮单词):

The "h" command copies the pattern buffer into the hold buffer. The pattern buffer is unchanged.

Instead of exchanging the hold space with the pattern space, you can copy the hold space to the pattern space with the "g" command. This deletes the pattern space. If you want to append to the pattern space, use the "G" command. This adds a new line to the pattern space, and copies the hold space after the new line.

示例:用sed模拟出tac的功能(倒序输出)。

文件内容

cat mm

1

2

3

解决方法:

sed ‘1!G;h;$!d’mm

ps:1!G第1行不 执行“G”命令,从第2行开始执行。

$!d,最后一行不删除(保留最后1行)

图解分析过程

P:Pattern Space

H:Hold Space

蓝色:Hold Space中的数据

绿色:Pattern Space中的数据

参考:

《sed and awk 第二版》

Sed - An Introduction and Tutorial by Bruce Barnett

sed的高级应用 - haijd Article

转载于:https://www.cnblogs.com/fhefh/archive/2011/11/22/2259097.html

sed之G、H、g、h使用相关推荐

  1. linux sed 空间模式,整理:SED的模式空间与缓冲区及n,N,d,D,p,P,h,H,g,G,x解析...

    sed命令n,N,d,D,p,P,h,H,g,G,x解析 1.sed执行模板=sed '模式{命令1;命令2}' 即逐行读入模式空间,执行命令,最后输出打印出来 2.p打印当前模式空间所有内容,追加到 ...

  2. H G W S哪一个不是状态函数_HAWE哈威BVH11H/M/S/2-X24换向阀

    原标题:HAWE哈威BVH11H/M/S/2-X24换向阀 HAWE哈威BVH11H/M/S/2-X24换向阀是BVH系列的阀,它具有两种以上的流动形式和两个以上的油口方向控制阀,能实现液压油流的够沟 ...

  3. 手机信号上的G、E、O、3G、H、H+是什么意思?

    手机信号上的G.E.O.3G.H.H+是什么意思?   使用智能手机的朋友会发现,在手机信号旁边都会有一些奇怪的字母,比如3G.E.H等等,这些字母都代表什么意思呢?哪种网络状态速度最快?下面让我们详 ...

  4. 你知道什么是 a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站…z 站吗 ?...

    code小生 一个专注大前端领域的技术平台 公众号回复Android加入安卓技术群 作者:好游快爆 链接:https://urlify.cn/2aMrme 前言 提到二次元,你只知B站? 其实--AB ...

  5. 作为程序员,你可以不知道技术网站,但是不能不知道什么是a站、b站、c站、d站、e站、f站、g站、h站…z站?

    提到二次元,你只知B站? 其实--ABCDEFGHIJKLMNOP,我们二次元像这样的圣地还有一个字母表! 这些以字母打头的站子,有的是国内第一批二次元发源地,有国际上口耳相传的御宅基地,也有换了好几 ...

  6. 放大器:A类、B类、AB类、D类、G类、H类

    放大器:A类.B类.AB类.D类.G类.H类 标签: 工作 2011-12-07 11:32 4889人阅读 评论(0) 收藏 举报 A类 A类放大器是最简单的放大器类型,对于任何输出波形,其输出级的 ...

  7. 已知$g=14_则php表达式$h=$g+=10_运算后的结果是,【北语网院】19春《PHP》作业_2(100分)...

    试卷总分:100    得分:100 第1题,哪个函数能把下面的数组内容倒序排列()$array() = array('a','b','c','d','e'); A.array_flip() B.ar ...

  8. 通信小常识(手机上网使用几G网络)[手机信号G、E、O、3G、H、H+的什么意思]

    1.手机信号G.E.O.3G.H.H+的什么意思? G指GPRS,是2.5G网络(iPhone显示O): E指EDGE网络,属2.75G: 3G指普通3G网络,速度在2-7M: H指3G的升级版hsd ...

  9. speech codec (G.711, G.723, G.726, G.729, iLBC)

    各种各样的编解码在各种领域得到广泛的应用,下面就把各种codec的压缩率进行一下比较,不正确之处望各位同行指正. Speech codec:     现主要有的speech codec 有: G.71 ...

  10. 语音编码标准(G.711 G.723 G.726 G.729 iLBC) .

    各种各样的编解码在各种领域得到广泛的应用,下面就把各种codec的压缩率进行一下比较. 现主要有的speech codec 有: G.711, G.723, G.726 , G.729, ILBC, ...

最新文章

  1. Facebook iOS 应用是如何加速图片显示的?
  2. 杜克大学计算机科学专业,杜克大学计算机科学专业研究生留学申请条件高不高?...
  3. C# WebProxy POST 或者 GET
  4. Lighting System Design UVA - 11400 动态规划
  5. 针对接口编程,不要针对实现编程
  6. php kml文件解析,英语翻译中文:详细分析了KML、MapInfo文件及二者之间的联系,以KML点标记文件为例,基于PHP编程实现了KML到...
  7. 有温度的技术,改善上亿人的生活
  8. P5952-[POI2018]水箱【最小生成树】
  9. 课时28.假链接(掌握)
  10. JQData数据提取及MySQL简单操作——基于Python
  11. OC-封装、继承、多态
  12. Java可靠性测试fit_Java ParagraphVectors.fit方法代码示例
  13. android studio 运行找不到类,android-studio – Android Studio找不到TestCase类
  14. 删除windows目录下的$NTUnintall$文件夹DOS命令
  15. GBaseStudio连接操作GBase数据库
  16. 【NodeJS】20 koa 企业级Cms内容管理系统-XMind功能分析、ERStudio设计数据库ER图
  17. BZOJ 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典
  18. IOS锁屏状态播放音乐时显示专辑信息和图片
  19. Ubuntu下硬件信息的查看方式
  20. 用友服务器系统,用友软件 用友云服务器

热门文章

  1. Windows7旗舰版磁盘分区详解—附分区步骤截图
  2. Thrift第三课 编写脚本
  3. win7系统下载 ghost win7 Sp1 64位纯净3月版
  4. CIO们对数据中心虚拟化心存的六大疑虑
  5. ecshop模板支持php,[老杨原创]关于ECSHOP模板架设的服务器php版本过高报错的解决方法集合...
  6. 【SDOI2008】仪仗队
  7. Windows应用程序开发
  8. dot-- 资源汇总
  9. # javascript 总结
  10. Linux中常用的操作指令(随时更新)