【问题标题】:How can I make grep print the lines below and above each matching line? [duplicate]如何让 grep 打印每个匹配行下方和上方的行? [复制]
【发布时间】:2010-11-07 13:01:27
【问题描述】:

我必须解析一个非常大的文件,我想使用命令 grep(或任何其他工具)。

我想在每个日志行中搜索单词FAILED,然后打印每个匹配行的上方和下方的行,以及匹配的行。

例如:

id : 15
Satus : SUCCESS
Message : no problem

id : 15
Satus : FAILED
Message : connection error

我需要打印:

id : 15
Satus : FAILED
Message : connection error

【问题讨论】:

    标签: linux grep


    【解决方案1】:

    grep 的-A 1 选项会在后面给你一行; -B 1会先给你一行; -C 1 将两者结合起来,在前后都给你一行,-1 也是如此。

    【讨论】:

    • +1,我忘了-C(上下文行)
    • @StevenLu,但仅限于grep 期间,因此请准备一个长输入。
    • 非常适合在 fasta 中搜索标题和获取序列(如果它是单线 fasta)
    • 你是个巫师
    • 我,每当我需要使用以下标志之一时,拍拍自己的后背:“-A 可以代表 'above' 或 'after' 而 -B 可以代表 'below' 或'before'。嗯……显然最合理的选择是 'above' 和 'below' 因为它们在屏幕上的显示方式是这样的,而且按字母顺序排列也很有意义。”
    【解决方案2】:

    使用 -B、-A 或 -C 选项

    grep --help
    ...
    -B, --before-context=NUM  print NUM lines of leading context
    -A, --after-context=NUM   print NUM lines of trailing context
    -C, --context=NUM         print NUM lines of output context
    -NUM                      same as --context=NUM
    ...
    

    【讨论】:

    • 有趣的是这是grep --help | grep context的输出
    【解决方案3】:

    使用 -A 和 -B 开关(表示后行和前行):

    grep -A 1 -B 1 FAILED file.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      相关资源
      最近更新 更多