如何让grep打印每条匹配线下方和上方的线?

poi*_*rez 340 linux grep

可能重复:
grep一个文件,但显示几个周围的行?

我必须解析一个非常大的文件,我想使用命令grep(或任何其他工具).

我想在每个日志行中搜索该单词FAILED,然后在每个匹配行的上方和下方打印该行,以及匹配行.

例如:

id : 15
Satus : SUCCESS
Message : no problem
Run Code Online (Sandbox Code Playgroud)
id : 15
Satus : FAILED
Message : connection error
Run Code Online (Sandbox Code Playgroud)

我需要打印:

id : 15
Satus : FAILED
Message : connection error
Run Code Online (Sandbox Code Playgroud)

pgs*_*pgs 702

grep的-A 1选项会给你一行; -B 1以前会给你一行; 并-C 1结合两者,在前后都给你一条线,-1也是一样的.

  • `-A 10`会给我十条命吗?这个游戏太容易了! (24认同)
  • +1,我忘了-C(上下文行) (11认同)
  • 每当我需要使用这些标志之一时,我都会拍拍自己的背:“`-A` 可以代表“之上”或“之后”,而“-B”可以代表“之下”或“之前”。嗯。 ..显然,最合理的选择是“上方”和“下方”,因为这就是它们在屏幕上的显示方式,而且按字母顺序排列也有意义。” (4认同)
  • @StevenLu,但仅限于`grep`的持续时间,所以准备一个长输入. (3认同)
  • 非常适合在 fasta 中搜索标题并获取序列(如果它是单行 fasta) (2认同)

tef*_*ozi 47

使用-B,-A或-C选项

grep --help
...
-B, --before-context=NUM  print NUM lines of leading context
-A, --after-context=NUM   print NUM lines of trailing context
-C, --context=NUM         print NUM lines of output context
-NUM                      same as --context=NUM
...
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,这是 `grep --help | 的输出。grep 上下文` (2认同)

Mil*_*kov 35

使用-A和-B开关(意思是后面的行和后面的行):

grep -A 1 -B 1 FAILED file.txt
Run Code Online (Sandbox Code Playgroud)