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 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时 ...
随机推荐
- Java学习2_一些基础2_字符串_16.5.5
接上一次的博客. 不可变字符串: Java中String类没有提供用于修改字符串的方法.如果想将greeting中的“Hello”改为“Help!”需要先提取所需要的的字符,然后再拼接.即 greet ...
- swift protocol 与类继承结合时的bug
protocol CommonTrait: class { func commonBehavior() -> String } extension CommonTrait { func comm ...
- 导出数据到Excel表格
开发工具与关键技术:Visual Studio 和 ASP.NET.MVC,作者:陈鸿鹏撰写时间:2019年5月25日123下面是我们来学习的导出数据到Excel表格的总结首先在视图层写导出数据的点击 ...
- C# 字符串每隔两个 提取
private void button3_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); str ...
- 梦想CAD控件关于id与handle问题
ID和句柄具有各自的特点: (1) ID:在一个任务中,本次任务中都是独一无二的.在不同的任务中,同一个图形对象的ID可能不同. (2) 句柄:在一个任务中,不能保证每个对象的句柄都唯一,但是在一个图 ...
- 17Aspectij
17Aspectij-2018/07/31 1.Aspectj基于xml 前置通知 method : 通知,及方法名 pointcut :切入点表达式,此表达式只能当前通知使用. pointcut-r ...
- 以gnome-terminal为例,修改gnome3 的默认配置
gnome连续几个版本的terminal默认配置文件都是同一个配置文件“b1dcc9dd-5262-4d8d-a863-c897e6d979b9”.这是因为gnome的developers编辑了这个配 ...
- python爬虫25 | 爬取下来的数据怎么保存? CSV 了解一下
大家好 我是小帅b 是一个练习时长两年半的练习生 喜欢 唱! 跳! rap! 篮球! 敲代码! 装逼! 不好意思 我又走错片场了 接下来的几篇文章 小帅b将告诉你 如何将你爬取到的数据保存下来 有文本 ...
- eshing wind/tidal turbine using Turbogrid
Table of Contents 1. meshing wind turbine using Turbogrid 1.1. ref 1 meshing wind turbine using Turb ...
- 使用nfs3将hdfs挂载到本地或远程目录(非kerberos适用)
最基本的配置方法,aix.kerberos等的操作详见http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/Hdf ...