【问题标题】:Sed print between patterns the first match resultsed 在模式之间打印第一个匹配结果
【发布时间】:2013-01-18 02:58:02
【问题描述】:

文件如下:

文件/home/user/

int yl_init(void);

文件/home/user/

int yl2_init(void);

我想使用sed -n '/File/,/;/p' 文件 但它表明

文件/home/user/

int yl_init(void);

文件/home/user/

int yl2_init(void);

我只想得到第一个匹配结果,例如:

文件/home/user/

int yl_init(void);

我只想要 sed。

【问题讨论】:

    标签: sed


    【解决方案1】:

    这可能对你有用(GNU sed);

    sed '/File/,/;/!d;/;/q' file
    
    • /File/,/;/!d 删除所有不在File; 之间的行
    • /;/q遇到包含;的行时退出

    【讨论】:

    • 为什么要删除不在 File 和 ';' 之间的所有行,我可以 sed 字符串然后在遇到包含 ; 的行时退出直接?
    • @choujayyl sed 通常会打印通过它的所有行,除非激活了-n 开关。 -n 本质上类似于 grep,除非通过 pP 命令显式打印,否则会抑制行的输出。所以sed -n '/File/,/;/p' filesed '/File/,/;/!d' file 的结果是一样的。
    【解决方案2】:

    您可以使用q 命令在匹配第二个模式时使 sed 退出:

    sed -n '/File/,$p;/;/q'
    

    【讨论】:

    • 打印/File/和文件末尾之间的每一行,但在打印一行分号后退出。
    猜你喜欢
    • 2019-01-03
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2015-04-14
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多