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

719*_*016 25 grep bash-scripting

我想对文本文件中的一个事件进行 grep,然后在找到每个事件后打印以下 N 行。有任何想法吗?

小智 38

Grep 有以下选项可以让您执行此操作(以及类似操作)。您可能需要查看手册页以获取更多信息:

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

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

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


gee*_*aur 7

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

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename
Run Code Online (Sandbox Code Playgroud)


ani*_*627 6

匹配行后打印 N 行

您可以使用grepwith-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
Run Code Online (Sandbox Code Playgroud)

其他相关选项:

在匹配行之前打印 N 行

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

$ grep -wns Line5 mytext.txt -B 2
3-Line3
4-Line4
5:Line5
Run Code Online (Sandbox Code Playgroud)

在匹配行前后打印 N 行

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

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 5

使用-A参数 togrep指定要输出超出匹配项的行数。