Grep忽略多行

时间:2009-09-29 10:06:14

标签: shell grep

Grep是否有办法使用-v开关忽略一行以及后面的下一行数。它主要用于过滤日志文件中的异常,即

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

grep it to produce:

Valid log entry 1
Valid log entry 2

我试过了grep -v Exception -A 2

但这不起作用。

任何想法都会受到赞赏。

4 个答案:

答案 0 :(得分:12)

尝试awk:

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

答案 1 :(得分:6)

sed -n '/^Exception/,+2!p' filename

答案 2 :(得分:3)

在您的情况下,您可能会告诉grep也忽略包含前导空格的任何行:

grep -v 'Exception|^\s'

答案 3 :(得分:0)

改善glenn jackman,通过管道一些命令,你可以得到之前/之后的行为:

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