sed中p和P有什么区别?

gop*_*esh 6 shell scripting sed

任何人都可以解释Sed pPSed 之间有什么区别?

假设在下面的文件中使用p和P打印包含gmail的行给出相同的o/p那么p和P之间有什么区别?

$ 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 
Run Code Online (Sandbox Code Playgroud)

pfn*_*sel 7

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

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

$ echo "line 1
$ This is line 2" | sed -n '1p'
> line 1
Run Code Online (Sandbox Code Playgroud)

我们也可以这样做

$ echo "line 1
$ This is line 2" | sed -n '1P'
> line 1
Run Code Online (Sandbox Code Playgroud)

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

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

$ echo "line 1
$ This is line 2" | sed -n '1{N; p}'
> line 1
> This is line 2
Run Code Online (Sandbox Code Playgroud)

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

$ echo "line 1
$ This is line 2" | sed -n '1{N; P}'
> line 1
Run Code Online (Sandbox Code Playgroud)

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