sed ‘N,P,D,lable循环’高级应用综合实例

简介:

  有一文本如下:

   wKioL1biZ-Sz1xc8AAATSnyE8Zg092.png

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

   wKioL1biaBvjxeIZAAANdo-YKZw002.png

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

   wKiom1biadGxZXkpAAAL8AqO1f0514.png

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

   wKioL1biarbzHQX9AAAEE30MzTo704.png

   相当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。

   

   具体执行过程:

   先看文本:wKiom1bic6iCAuxIAAADrB5RTs0843.png

   命令: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


相关文章
|
9月前
|
API
第四十七章 使用 ^SystemPerformance 监视性能 - 自定义 ^SystemPerformance 实用程序
第四十七章 使用 ^SystemPerformance 监视性能 - 自定义 ^SystemPerformance 实用程序
59 0
|
6月前
【Azure Developer】使用PowerShell Where-Object方法过滤多维ArrayList时候,遇见的诡异问题 -- 当查找结果只有一个对象时,返回结果修改了对象结构,把多维变为一维
【Azure Developer】使用PowerShell Where-Object方法过滤多维ArrayList时候,遇见的诡异问题 -- 当查找结果只有一个对象时,返回结果修改了对象结构,把多维变为一维
|
9月前
|
JavaScript 前端开发 API
ES6学习笔记--字符串与数值的拓展
ES6学习笔记--字符串与数值的拓展
|
9月前
|
Java 索引
正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图
正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图
102 0
|
JavaScript 前端开发
ES6学习(四)—字符串的新增方法
ES6学习(四)—字符串的新增方法
|
安全 开发工具 git
[BJDCTF2020]Mark loves cat |变量覆盖(三解)
[BJDCTF2020]Mark loves cat |变量覆盖(三解)
178 0
|
PHP
php开发实战分析(3):php中判断变量为空(0、false、null)的方法
php开发实战分析(3):php中判断变量为空(0、false、null)的方法
317 0
|
JavaScript 网络架构
ES6知识点补充——剩余参数、展开语法
JS查漏补缺系列是我在学习JS高级语法时做的笔记,通过实践费曼学习法进一步加深自己对其的理解,也希望别人能通过我的笔记能学习到相关的知识点。这一次我们来了解剩余参数、展开语法
206 0
ES6 数组去重的最佳实践:Set 结合 Array.from() | 拓展运算符结合 Set
一直想写个ES6特性的系列文章,整理了一段时间,不想写概而全的纯理论,只想写一些贴近工作的, 最常用到的,比如块级作用域,箭头函数,字符串模板等等---敬请期待 上面那两个方法并不是万能的,只能作为常规的数组去重,因为涉及到对象或者多维数组的去重, 还是需要其他一些方法来辅助,该遍历遍历,该比较还是得比较。。。。
263 0
|
Python
ZZULIOJ-1083,数值统计(多实例测试)(Python)
ZZULIOJ-1083,数值统计(多实例测试)(Python)