如何grep某个文本并显示其行和之后的行

kol*_*nep 3 grep

我有一个类似于以下内容的文件:

abcdef
123
ghiflk
234
sfhskdhf
483
Run Code Online (Sandbox Code Playgroud)

我想搜索一个字符串,输出还应包括下一行(和/或上一行)。

例如:

grep "bcd" myfile

Output:
abcdef
123
Run Code Online (Sandbox Code Playgroud)

或显示上一行:

grep "ifl" myfile

Output:
123
ghiflk
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几天在网上找到解决方案,但似乎无法弄清楚。

Ste*_*n D 14

GNU 和 BSDgrep实用程序具有-A匹配后行的-B选项和匹配前行的选项。因此,您可以执行以下操作:

$ grep -A 1 bcd myfile
abcdef
123
Run Code Online (Sandbox Code Playgroud)

在比赛结束后显示这条线和

$ grep -B 1 ifl myfile
123
ghiflk
Run Code Online (Sandbox Code Playgroud)

显示匹配之前的行。最后,您可以使用-C来显示匹配前后的 N 行:

$ grep -C 1 ifl myfile
123
ghiflk
234
Run Code Online (Sandbox Code Playgroud)

如果您的版本grep不支持此功能,您可以尝试其他一些方法:

还有很多很多。


PM *_*ing 5

除了 Steven D 提到的选项之外,GNU grep 接受一个(未记录的)arg 到 -n 选项,该选项指定要在匹配行之前和之后打印的行数。当然,使用 -n 会打开行编号,因此如果您不想要行号,那么 -A 和 -B 选项会更好。

例如,grep -n1 pattern表现得像grep -n -A1 -B1 pattern


正如 don_crissti 在评论中提到的,这实际上并不是-n选项的未记录参数。-NUM(其中NUM是整数)实际上是-C NUM选项的同义词,因此-nNUM实际上是-n -C NUM.