【问题标题】:How to print 2 consecutive lines after a pattern in file using awk and the matched line itself如何使用 awk 和匹配的行本身在文件中的模式之后打印 2 个连续行
【发布时间】:2013-10-30 06:58:17
【问题描述】:

在如下文本文件中,

####PATTERN#######
#Line1
#Line2
#Line3
#Line4
####PATTERN#######
#Line1
#Line2
#Line3
#Line4
#Line5
####PATTERN#######
#Line1
#Line2
#Line3
#Line4

我想提取匹配的行和接下来的 2 行。输出应该是:

####PATTERN#######
#Line1
#Line2
####PATTERN#######
#Line1
#Line2
####PATTERN#######
#Line1
#Line2

如何做到这一点?

谢谢, 亚历克斯

【问题讨论】:

标签: regex awk


【解决方案1】:

awk,根据要求

awk '/PATTERN/{c=3}c&&c--' file

awk '/PATTERN/{c=3}c-->0' file

但使用grep 会更容易:

grep -A2 file

【讨论】:

    【解决方案2】:

    有一种使用 grep 的简单方法可以做到这一点。您将在上下文之间获得-- 行,并且可以使用反向匹配-v 来删除它们。请参阅 grep man page 中的文档。

    grep -A2 "PATTERN" file | grep -v -- "^--$"
    

    使用 awk:

    awk '/PATTERN/{c=NR+2}(NR<=c){print}' file
    

    使用 sed:

    sed '/PATTERN/,+2!d' file
    

    Perl 单行

    perl -ne 'print if (/PATTERN/ and $p=2) .. not $p--' file
    

    【讨论】:

    • 去掉组分隔符,也可以使用grep --no-group-separator -A2 ...
    【解决方案3】:

    使用这个 awk:

    awk '/PATTERN/{s=1} s++ < 4' file
    
    ####PATTERN#######
    #Line1
    #Line2
    ####PATTERN#######
    #Line1
    #Line2
    ####PATTERN#######
    #Line1
    #Line2
    

    【讨论】:

      猜你喜欢
      • 2011-07-16
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多