2014-01-07 86 views
2

我正在處理比我想要的更冗長的輸出,所以我試圖用grep來減少它。輸出看起來是這樣的......如何刪除反向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來說更好?

回答

1

或SED(gsed在OSX):

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

感謝@ChristianF,出現做什麼,我需要!我想我遵循它的一部分,但是''a; N; $!ba;'部分在做什麼? –

+0

請看這裏:http://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n。它基本上允許你匹配/替換整個新行 –

+0

''我想我遵循它的一部分,但什麼是:a; N; $!ba;部分在做什麼?「 - 無價:-)。 –

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

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