sed 之 N D P
sed的N,D,P 是用于多行模式空间的命令,分别对应于n,d,p
n & N: n(next)输出模式空间的内容,然后读取新的输入行,n命令不创建多行模式空间;N(Next)通过读取新的输入行,并将它添加到模式空间的现有内容之后来创建多行模式空间。
注:在模式空间中嵌入的换行符可以利用转移序列"\n" 来匹配,在多行模式空间中"^"匹配空间中的第一个字条,而不匹配换行符后面的字符,同样"$"只匹配模式空间最后的换行符。
d & D: d删除模式空间的内容并导致读入新的输入行,并且在脚本顶端重新使用编辑方法。D删除模式空间中直到第一个嵌入的换行符的这部分内容,D不会导致读入新的输入行并且它返回到脚本的顶端,将这些指令应用于模式空间的剩余内容。例如:
cat test
a
b
c sed -n '/^a/{
P
N
p
/a/D
p
}' test 输出:
a
a
b
解释:test是一个三行的文本(a,b,c);sed匹配首字母是a的行/^a/(模式空间:a);P打印出来模式空间中直到第一个嵌入的换行符的部分(a);然后用N向模式空间中追加一行(模式空间:a\nb);p打印出来模式空间的内容(a,b);接着如果模式空间中匹配到了a(/a/),D命令删除模式空间中直到第一个嵌入的换行符的这部分内容(模式空间:b),并且返回脚本顶部,将这些命令用于模式空间剩余内容(b);但是模式空间中并没有匹配到/^a/,所以没有后续输出了。
p & P : p 打印模式空间内容;P打印模式空间中知道第一个嵌入的换行符的部分。
P命令经常在N之后和D之前。N D P能建立一个输入/输出循环,用来维护两行的模式空间,但是一次只输出一行。这个循环的目的是只输出模式空间的第一行,然后删除(D)模式空间第一行,然后返回到脚本的顶端将所有的命令应用于模式空间的第二行。
sed & awk 例:P125
创建模式空间以匹配第一行结尾处的"UNIX"和第二行开始出的"System"。如果发现"UNIX System"跨越两行,那么我们将它变成"UNIX Operator System"。建立这个循环以返回到脚本的顶端,并寻找第二行结尾处的"UNIX"
脚本:sed.Print
/UNIX$/{
N
s/\nSystem/ Operating &/
P
D
}
测试脚本 test.Print
Here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
Operating System
sed -f sed.Print test.Print 输出:
Here are examples of the UNIX Operating
System. Where UNIX Operating
System appears, it should be the UNIX
Operating System
指令执行的顺序图见下:
输入/输出循环让我们可以匹配出在第二行结束处出现的UNIX。如果正常输出两行的模式空间,那么就不能匹配出第二行结尾处的UNIX。
sed -n '/UNIX$/{
N
s/\nSystem/ Operating &/
p
}' test.Print 输出:
Here are examples of the UNIX Operating
System. Where UNIX
System appears, it should be the UNIX
Operating System
可见,如果没有用D,则在追加了第二行,并且进行替换打印(p)模式空间后,就继续处理第三行了,并没有对第二行进行匹配替换。
所以,N命令追加下一行,P打印出第一行,D删除第一行并且跳到脚本顶部,并将脚本命令作用于模式空间剩下内容;N命令追加下一行,P打印出第一行,D删除第一行……
sed 之 N D P的更多相关文章
- sed的应用
h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...
- 文本处理三剑客之sed命令
第十八章.文本处理三剑客之sed命令 目录 sed介绍 sed命令常用选项 sed常用编辑命令 sed使用示例 sed高级语法 18.1.sed简介 sed全名stream editor,流编辑器,s ...
- 6-2 sed 命令
1. sed : stream editor,流编辑器 是处理纯ASICC纯文本,按行琢行操作的. 编辑器有两种,行编辑器和全屏编辑器 sed:默认不编辑原文件,仅对模式空间中的数据做处理,而后.处理 ...
- 基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od
awk awk是个很好用的东西,大量使用在linux系统分析的结果展示处理上.并且可以使用管道, input | awk '' | output 1.首先要知道形式 awk 'command' fi ...
- sed awk grep三剑客常用
sed的常用用法: awk的常用用法: grep的常用用法: 除了列出符合行之外,并且列出后10行. grep -A 10 Exception kzfinance-front.log 除了列出符合行之 ...
- linux shell 用sed命令在文本的行尾或行首添加字符
转自 http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed ...
- Sed、Awk单行脚本快速参考
文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...
- sed awk 样例
sed [options] '[action]' filename options: -n:一般sed命令会把所有数据都输出到屏幕,如果加入此选项,则只会把经过sed命令处理的行输出到屏幕. -e:允 ...
- linux sed命令详解
简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...
- sed命令详解
搜索 纠正错误 添加实例 sed 功能强大的流式文本编辑器 补充说明 sed 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时 ...
随机推荐
- HDU_1203_01背包
I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 安卓app测试之Monkey测试
一.Monkey特点 1.运行时机:一般是产品稳定后 首轮功能测试完成的夜间进行 2.需要知道packageName 3.目的:主要测试产品是否存在崩溃问题和ANR问题. 二.获取包名的两个方法 首先 ...
- vs 2017 清空 打开项目的历史记录
- C++_运算符重载 总结
什么是运算符的重载? 运算符与类结合,产生新的含义. 为什么要引入运算符重载? 作用:为了实现类的多态性(多态是指一个函数名有多种含义) 怎么实现运算符的重载? 方式:类的成员函数 或 友元函数(类外 ...
- vue城市三级联动组件 vue-area-linkage
Install the pkg with npm: // v5之前的版本 npm i --save vue-area-linkage // v5及之后的版本 npm i --save vue-area ...
- LES on Wind turbine
- * screen recording on Ubuntu
- byzanz- kazam-recordmydesktophttps://www.ubuntupit.com/15-best-linux-screen-recorder-and-how-to-in ...
- 洛谷 4768 LOJ 2718「NOI2018」归程
[题解] 本题有多种做法,例如可持久化并查集.kruskal重构树等. kruskal重构树的做法是这样的:先把边按照海拔h从大到小的顺序排序,然后跑kruskal建立海拔的最大生成树,顺便建krus ...
- saltstack(四) saltstack的targeting、分组
targeting支持如下matcher: Globing : '*', 正则: 指定-E参数,正则表达式匹配多个 List: 指定-L参数,salt -E 'web1-(prod|devel)' t ...
- BNUOJ 14381 Wavio Sequence
Wavio Sequence Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Origina ...