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
但这不起作用。
任何想法都会受到赞赏。
答案 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