sed中p和P有什么区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed中p和P有什么区别?相关的知识,希望对你有一定的参考价值。

任何人都可以解释在Sed中pP有什么区别?

假设我想在下面的文件中打印包含gmail的行,使用pP给出相同的输出:

$ cat abc.txt 
Gmail 10
Yahoo 20
Rediff 18

$ sed -n /Gmail/p abc.txt
Gmail 10 

$ sed -n /Gmail/P abc.txt
Gmail 10 

pP有什么区别?

答案

中,p打印所寻址的行,而P仅打印所寻址行的第一部分(直到换行符 )。如果缓冲区中只有一行,pP是相同的,但逻辑上应该使用p

让我们看一个学术但简单的例子。我们假设我们要打印第1行,我们可以做

$ echo "line 1
$ This is line 2" | sed -n '1p'
> line 1

我们也可以这样做

$ echo "line 1
$ This is line 2" | sed -n '1P'
> line 1

两个命令都做同样的事情,因为缓冲区中没有换行符。

但是现在我们使用N命令在缓冲区中添加第二行:

$ echo "line 1
$ This is line 2" | sed -n '1{N; p}'
> line 1
> This is line 2

现在我们在缓冲区中有两行,我们用p打印它们。

$ echo "line 1
$ This is line 2" | sed -n '1{N; P}'
> line 1

我们再次在缓冲区中有2行,但我们只打印了第一行,因为我们使用的是P而不是p

另一答案

Explanation of different option pretty well summarized: http://www.grymoire.com/Unix/SedChart.pdf

以上是关于sed中p和P有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

文本处理之sed

int *p=NULL 和 *p=NULL有什么区别

sed awk 用户管理

python中的p = 和p:dict = 有啥区别? [复制]

linux、 grep 、awk、sed 删除关键字的上一行

int * const * p和int ** const p之间有什么区别