shell - sed中p和P有什么区别?

标签 shell scripting sed

谁能解释一下 p 之间的区别和 P在 Sed?

假设我想同时使用 p 在下面的文件中打印包含 gmail 的行和 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 
p有什么区别和 P ?

最佳答案

, p打印地址行,而 P仅打印寻址行的第一部分(最多为换行符 \n)。如果缓冲区中只有一行,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

现在我们在缓冲区中有 2 行,我们用 p 打印它们。 .
$ echo "line 1
$ This is line 2" | sed -n '1{N; P}'
> line 1

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

关于shell - sed中p和P有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20194488/

相关文章:

shell - 使用 sed 或 grep 进行日志解析

shell - 创建Hive表的Shell脚本

python - 将成员/变量从 python 脚本传递到 shell 脚本或命令

linux - 如何通过在 linux 中传递变量从包含字符串的行之前的文件中删除所有数据

bash - 用另一个文件的内容替换文件中分隔的文本 block

linux - 使用 bash 重命名多个目录中的文件

windows - 如何使用硬编码密码修复 PowerShell 中 WinSCP SFTP 脚本中的安全性

c++ - C++中一行命令的执行没有返回预期的结果

regex - 使用 sed 替换列字段分隔符

shell - sed:保留包含 block 模式的每个单词的最后一个 block