【问题标题】:What is the difference between p and P in sed?sed中的p和P有什么区别?
【发布时间】:2013-12-10 06:18:17
【问题描述】:

谁能解释一下 Sed 中 pP 的区别是什么?

假设我想使用pP 在下面的文件中打印包含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 

pP 有什么区别?

【问题讨论】:

    标签: shell scripting sed


    【解决方案1】:

    【讨论】:

    • 如果您要确定确切的点,而不仅仅是扔文字墙或一些通用的异地手册,那么答案会更有建设性。
    • 前面的解释是完整和完整的(由 pfnuesel 提供),这只是补充,如果有人看不懂,最好避免使用 sed。但是好的,我会避免提供这种信息。
    • 一般来说,“仅链接”的答案不是一个好主意,尤其是因为链接很少像我们希望的那样稳定。不过,提供一个链接作为答案的一部分,同时讨论相关问题是一个好主意。
    【解决方案2】:

    中,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

    【讨论】:

    • “最多”如包括\n?
    猜你喜欢
    • 2019-12-14
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2021-01-05
    • 2014-10-09
    相关资源
    最近更新 更多