2009-09-29 70 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 2009-09-29 11:34:01

+1

有了這個簡單的例子,它確實似乎更容易grep你想要什麼,而不是消除你不想要的:'grep Valid' – 2009-09-29 13:21:07

回答

11

嘗試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

任何文檔引用這個?很難谷歌符號 – useless 2016-09-08 14:19:14

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