sed 输出多行命令 P
在前面的章节 sed 输入源读行命令 N 中我们学习了如何从输入源中读取多行然后追加到 模式缓冲区 中。
但随之也带来了一个问题,我们知道,p
命令用于输出 模式缓冲区 中的数据,而且是一股脑儿全部输出的。
[www.twle.cn]$ sed -n 'N;N;p;N;N;N' data.txt
假设 data.txt 中的内容如下
1) 小明,23岁,北京大学 2) 小红,22岁,清华大学 3) 小李,25岁,斯坦福大学 4) 小王,22岁,清华大学 5) 小刚,27岁,北京大学 6) 小英,21岁,哈佛大学
那么输出结果如下
1) 小明,23岁,北京大学 2) 小红,22岁,清华大学 3) 小李,25岁,斯坦福大学
为了方便演示 p
命令的效果,我们使用 N
命令从输入源中读取前两行加上默认读取的行,在 p
命令之前已经有 3 行了。
从输出结果中可以看到 p
命令把 3 行都输出了。
后面的三个
N
命令是为了演示目的,主动不输出。
问题来了,我们可以不可以中输出 模式缓冲区 中的部分行呢?
答案是肯定的。
sed 提供了大写字母 P
命令用于输出 模式缓冲区 中的指定行。
sed 输出多行命令 P
与 p
命令一股脑儿的输出模式缓冲区中的全部数据不同,大写字母 P
用于输出模式缓冲区中的指定行。
如果模式缓冲区只有一行,那么, p
和 P
命令的作用是相同的。
大写字母 P
命令的语法格式如下
[address1[,address2]]P
address1
和 address2
是 行寻址 的开始行和结束行
范例
我们改良下上面的范例,使用 N 命令从输入源中读取一行,但使用 P 命令只输出第一行,达到只输出奇数行的效果。
[www.twle.cn]$ sed -n 'N;P' data.txt
运行结果如下
1) 小明,23岁,北京大学 3) 小李,25岁,斯坦福大学 5) 小刚,27岁,北京大学