任何人都可以解释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
之间的区别是什么?
答案 0 :(得分:7)
在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
现在我们在缓冲区中有两行,我们用p
打印它们。
$ echo "line 1
$ This is line 2" | sed -n '1{N; P}'
> line 1
我们再次在缓冲区中有2行,但我们只打印了第一行,因为我们使用的是P
而不是p
。
答案 1 :(得分:1)