我想在文本文件中查找某个事件,然后在找到每个事件后打印以下 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
指定输出匹配项以外的多少行。