如何删除反grep匹配上下的行?

时间:2014-01-07 00:08:11

标签: bash sed awk grep command-line-interface

我正在处理一些比我想要的更冗长的输出,所以我试图用grep来减少它。输出看起来像这样......

path/to/file1:
No Problems Found

path/to/file3:
Problem Found

我想过滤掉有关文件的所有输出而不会出现问题。我可以通过grep -v "No Problems Found"管道输出来删除它的一行。我以为我能够沿着grep -B 1 -A 1 -v "No Problems Found"的行使用-B和-A,但事实证明,当与-v一起使用时,它们不会反转。

我可以在导出文件后在Vim中快速修改输出,但我想直接在命令行上执行,如果可以的话。有任何想法吗?这对Awk或Sed来说是一个更好的工作吗?

2 个答案:

答案 0 :(得分:3)

awk -v RS= -v ORS='\n\n' '/No Problems Found/' file

awk -v RS= -v ORS='\n\n' '!/Problem Found/' file

答案 1 :(得分:1)

或使用sed(在osx上获取):

sed ':a;N;$!ba;s/[^\n]*\nNo Problems Found\n//g'