在找到的行之前/之后打印 X 行

MaV*_*aVe 8 grep awk sed

我想在某个文件中搜索特定的字符串。如果我找到了该字符串,我还想在该行之前(或之后)打印 X 行。

这可以与 grep 或 awk 一起使用,还是我需要组合?

我想有像这样,但与之前或一击,只有第十届毕竟尾随/主导线。

例如,如果我的输入如下所示:

line1 with a pattern
line2
line3
line4 with a pattern
line5
line6
line7 with a pattern
...
Run Code Online (Sandbox Code Playgroud)

例如,我想搜索“模式”一词并输出该行 + 之后 2 行的行,而不是直接跟在模式行之后的行。所以所需的输出是:

line1 with a pattern
line3
line4 with a pattern
line6
line7 with a pattern
...
Run Code Online (Sandbox Code Playgroud)

Mar*_*iae 16

grep会为你做这件事,有选项-A(之后)和-B(之前),和-C(上下文)。我经常使用的一个例子是:

   sudo lspci -vnn | grep -i net -A 12
Run Code Online (Sandbox Code Playgroud)

因为这个命令会在匹配后显示 12 行,其中包括用于控制网络(-i net)卡的驱动程序。一般来说,命令是:

  grep text_to_search -A n -B m file.extension
Run Code Online (Sandbox Code Playgroud)

这将输出m匹配前的n行和匹配后的行。或者你可以使用

 grep text_to_search -C n file.extension
Run Code Online (Sandbox Code Playgroud)

显示n找到的文本周围的总行数(匹配前一半,匹配后一半)。