如何让 grep 打印每个匹配行下方和上方的行? [复制]

Posted

技术标签:

【中文标题】如何让 grep 打印每个匹配行下方和上方的行? [复制]【英文标题】:How can I make grep print the lines below and above each matching line? [duplicate] 【发布时间】: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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何让 grep 打印每个匹配行下方和上方的行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Logging:显示匹配行上方和下方的行

如何让“grep”在 grep 行上方显示一行五行?

如何在熊猫数据框中找到标准匹配上方和下方的x行,然后将它们保存为新的df?

grep, egrep, fgrep - 打印匹配给定模式的行

grep命令详解

正则grep用法