如何 grep 并打印命中后的接下来的 N 行?

如何 grep 并打印命中后的接下来的 N 行?

我想在文本文件中查找某个事件,然后在找到每个事件后打印以下 N 行。有什么想法吗?

答案1

Grep 有以下选项可以让你执行此操作(以及类似操作)。你可能想看看手册页了解更多信息:

  • -A num 打印每次匹配后的 num 行尾随上下文。另请参阅 -B 和 -C 选项。

  • -B num 打印每次匹配前的 num 行前导上下文。另请参阅 -A 和 -C 选项。

  • -C[num] 打印每个匹配项周围的前导和尾随上下文的 num 行。默认值为 2,相当于 -A 2 -B 2。注意:选项和其参数之间不能有空格。

答案2

在匹配的行后打印 N 行

您可以使用grep选项-A n在匹配的行后打印 N 行。

例如:

$ cat mytext.txt 
  Line1
  Line2
  Line3
  Line4
  Line5
  Line6
  Line7
  Line8
  Line9
  Line10

$ grep -wns Line5 mytext.txt -A 2
5:Line5
6-Line6
7-Line7

其他相关选项:

在匹配的行之前打印 N 行

使用-B n选项您可以在匹配行之前打印 N 行。

$ grep -wns Line5 mytext.txt -B 2
3-Line3
4-Line4
5:Line5

打印匹配行之前和之后的 N 行

使用-C n选项您可以打印匹配行之前和之后的 N 行。

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7

答案3

如果您有 GNU grep,则是-A/--after-context选项。否则,您可以使用awk

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename

答案4

使用-A参数来grep指定输出匹配项以外的多少行。

相关内容