谁能解释Sed中p
和P
有什么区别?
假设我想使用p
和P
在以下文件中打印包含gmail的行,并提供相同的输出:
$ 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
p
和P
有什么区别? 最佳答案
在sed中,p
打印所寻址的行,而P
仅打印所寻址行的第一部分(最多换行符\n
)。如果缓冲区中只有一行,则p
和P
是同一件事,但在逻辑上应使用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
现在我们在缓冲区中有2行,并且我们都使用
p
来打印它们。$ echo "line 1
$ This is line 2" | sed -n '1{N; P}'
> line 1
同样,缓冲区中有2行,但是由于只使用了
P
而不是p
,所以只打印了第一行。