2009-09-29 6 views
12

Grepが-vスイッチを使用して行とそれに続く行数を無視する方法はありますか?その基本的にそれが生成するログファイル、すなわちGrepは複数の行を無視します

Valid log entry 1 
Exception exceptionname 
    at a.b.c 
    at d.e.f 
    ... 
Valid log entry 2 

はgrepからの例外をフィルタリングします

Valid log entry 1 
Valid log entry 2 

私は

grep -v Exception -A 2を試してみましたが、これは動作しません。

すべてのアイデアをいただければ幸いです。あなたのケースでは

+0

-vは-Aを反転させず、ちょうど一致します – dave

+1

この単純な例では、望ましくないものを削除するのではなく、あなたがしたいことをgrepする方が簡単です: 'grep Valid' –

答えて

11

するTryのawk:グレン・ジャックマンさんに改善

awk -v nlines=2 '/^Exception/ {for (i=0; i<nlines; i++) {getline}; next} 1' 
3

、あなたはまた、先頭の空白を含むすべての行を無視するgrepを伝えるかもしれません:

grep -v 'Exception|^\s' 
5
 
sed -n '/^Exception/,+2!p' filename 
+0

この? Googleのシンボルには難しい – useless

0

を、いくつかの配管により、前/後の行動を得ることができるコマンド:

awk -v nlines_after=5 '/EXCEPTION/ {for (i=0; i<nlines_after; i++) {getline};print "EXCEPTION" ;next} 1' filename.txt|\ 
tac|\ 
awk -v nlines_before=1 '/EXCEPTION/ {for (i=0; i<nlines_before; i++) {getline}; next} 1'|\ 
tac 
関連する問題