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 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时 ...
随机推荐
- (转)淘淘商城系列——导入商品数据到索引库——Service层
http://blog.csdn.net/yerenyuan_pku/article/details/72894187 通过上文的学习,我相信大家已经学会了如何使用Solrj来操作索引库.本文我们将把 ...
- @objc and dynamic
@objc and dynamic Objective-C runtime visibility and the depths of dynamic dispatch in the modern ...
- CLISTCTRL2
回顾: 刚刚写完,因为是分期写的,所以最初想好好做一下的文章格式半途而废了~说的也许会有点啰嗦,但是所有的基础用到的技术细节应该都用到了. 如果还有什么疑问,请回复留言,我会尽力解答. 如果有错误,请 ...
- linux 下mysql无法启动 mysql.sock
在公司装的一键安装的lnmp环境,启动mysql时候发现mysql.sock不存在, 然后我进行查找 最后在 /usr/local/mysql/bin/mysql_safe 重新启动下 然后启动 ...
- MAC 打开Chrome打开开发者工具的快捷键
mac下safari和chrome打开开发者工具的快捷键相同,都是 option(alt)+command+i 这个是我的默认配置,没有更改过的.
- [luogu4571 JSOI2009] 瓶子和燃料 (数论)
传送门 Solution 题目说的很迷,但可以发现两个瓶子互相倒最少是容积的gcd 那么题目就转化为求其中选k个瓶子gcd的最大值,这个可以分解因数,枚举因数得到 Code //By Menteur_ ...
- VM 安装ubuntu16.04简易方法
在已经安装好VM10虚拟机后 首先文件—>新建虚拟机—>典型(标准) 选择稍后安装操作系统,后续要使用的是已经下载好的ubuntu16.04镜像 选择操作系统是linux ,版本是ub ...
- Maven_运行时环境
首先,创建一动态web工程. Src-----源码目录 build文件夹在java结构下看不出,但可以在Navigator下可以看出是个源码目录,如下图: 以下图中是运行时环境. 它其实是一组jar包 ...
- java中List遍历删除元素-----不能直接 list.remove()
https://blog.csdn.net/github_2011/article/details/54927531 这是List接口中的方法,List集合调用此方法可以得到一个迭代器对象(Itera ...
- So easy
Problem Description Small W gets two files. There are n integers in each file. Small W wants to know ...