博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sed ‘N,P,D,lable循环’高级应用综合实例
阅读量:6328 次
发布时间:2019-06-22

本文共 955 字,大约阅读时间需要 3 分钟。

   有一文本如下:

   

   我想把文本格式变成姓名加成绩格式,图示如下:

   

   自己捣鼓好久,用几条命令实现,具体如下:

   

   群里的大神,也写了条命令,如下:

   

   相当V5给力的一条sed命令。

   看得云里雾里的。刚好比较有得闲,仔细学习研究了2天时间,终于理解了。特意记录下理解过程,具体如下:

   命令:sed ':1;N;/\n[A-Za-z]/!s/\n/ /;t1;P;D'

   具体解释:

   :1到t1,这是一个循环,用到的是 sed t lable,

   N,追加下一行进入匹配空间。

   /\n[A-Za-z]/!s/\n/ /,/\n[A-Za-z]/匹配任意一个\n(换行符)加英文字母。!不执行,s/\n/ /,删除换行符。这条命令整个的意思是,不匹配\n[A-Za-z]的行,删除\n(换行符)。

   P,打印多行匹配空间的第一行。

   D,删除多行匹配空间的第一行。

   N,P,D结合使用,建立一个输入输出循环,维护两行的匹配空间,只输出第一行,然后返回脚本的顶端,将所有命令用于匹配空间的第二行。请重点注意这点。NPD三个都写了就形成个循环,不能单独分析N或者P或者D。

   

   具体执行过程:

   先看文本:

   命令:sed ':1;N;/\n[A-Za-z]/!s/\n/ /;t1;P;D'

   1.设立:1 label标识。

   2.读入文本第一行 am  

   3.执行N,读入下一行 99到匹配空间 现在匹配空间的内容为 am \n 99 

   4.执行匹配,不匹配,因此删除 \n,匹配空间为变为  am 99

   5.设置的结束循环的条件为:/\n[A-Za-z]/,暂时没有匹配到这个条件,执行t1,回到命令顶端1。

   6.读入下一行,依次执行上面的顺序。

   7.从am 到76,全部执行一遍,匹配空间的内容为 am 99 100 80 76

   8.读到yx这行的时候,匹配空间内容为 am 99 100 80 76 \n yx,注意:\nyx匹配/\n[A-Za-z]/,循环打破,执行P,D。

   9.重点:前面的N必须和P和D一起综合起来理解。输出匹配空间的第一行:am 99 100 80 76。匹配空间的第二行:yx,重新开始顺序执行命令。

   

本文转自 am2012 51CTO博客,原文链接:http://blog.51cto.com/goome/1749971

转载地址:http://imwoa.baihongyu.com/

你可能感兴趣的文章
一位83岁独立开发者教会我的道理
查看>>
Blazor将.NET带回到浏览器
查看>>
写jquery插件【轮播图】历程
查看>>
Reddit引入Envoy支持架构改造,性能显著提升
查看>>
那些巨头公司的前端面试都喜欢问些什么?
查看>>
云原生应用程序的架构应该怎么设计?
查看>>
保持分布式团队同步
查看>>
Go 2将添加错误处理和泛型
查看>>
腾讯集团与光大集团签署战略合作 共建金融科技创新实验室
查看>>
Apache Pulsar中的地域复制,第1篇:概念和功能
查看>>
如何利用又拍云玩转live photo,没有6S也能玩
查看>>
为你量身定做的一场容器技术大会
查看>>
阿里宣布开源Flutter应用框架Fish Redux!
查看>>
艰困之道中学到的经验教训
查看>>
Oracle推出轻量级Java微服务框架Helidon
查看>>
基于clang插件的一种iOS包大小瘦身方案
查看>>
IBM技术专家:Hyperleger Fabric 架构与部署实例解析
查看>>
企业金融云存储建设之路
查看>>
腾讯云携手SENSORO,为城市安全保驾护航
查看>>
webpack学习(二)—— 进阶
查看>>