在我的公司,我们有一个带有java stacktraces的巨大日志文件。一般来说,其格式为:
useful line 1
useful line 2
useful line 3
MARKER1 start of exception
... <--Around 100 lines here
end of exception MARKER2
useful line 4
useful line 5
useful line 6
MARKER1 start of exception
... <--Around 100 lines here
end of exception MARKER2
useful line 7
它包含有用的信息和无用的例外。
是否可以使用awk / sed / grep的组合从日志中过滤掉无用例外的全部内容。?
在上面的示例中,输出为:
useful line 1
useful line 2
useful line 3
useful line 4
useful line 5
useful line 6
useful line 7
感谢。
答案 0 :(得分:3)
另一个sed
具有锚定模式
$ sed '/^MARKER1/,/MARKER2$/d' file
useful line 1
useful line 2
useful line 3
useful line 4
useful line 5
useful line 6
useful line 7
或翻译为awk
$ awk '/^MARKER1/,/MARKER2$/{next} 1' file
答案 1 :(得分:2)
根据您的意见,您可以:
$ awk 'BEGIN{ flag=1 } /MARKER/ {flag=!flag; next} flag' file
useful line 1
useful line 2
useful line 3
useful line 4
useful line 5
useful line 6
useful line 7
正如评论中所指出的,你也可以这样做:
awk '/MARKER/{f=!f;next} !f' file
答案 2 :(得分:2)
排除异常的开始和结束以及介于两者之间的所有内容:
$ awk '/start of exception/,/end of exception/{next} 1' file
useful line 1
useful line 2
useful line 3
useful line 4
useful line 5
useful line 6
useful line 7
工作原理:
/start of exception/,/end of exception/{next}
对于从例外的开始到结束范围内的任何行,我们跳过其余命令并从next
行重新开始。
1
对于任何其他行,我们打印它们。 1
是awk的简写版本。
$ sed '/start of exception/,/end of exception/d' file
useful line 1
useful line 2
useful line 3
useful line 4
useful line 5
useful line 6
useful line 7
工作原理:
/start of exception/,/end of exception/d
对于从例外的开始到结束范围内的任何行,我们删除该行(d
)。
默认情况下,所有其他行都会打印出来。
答案 3 :(得分:0)
我认为
cat filename | grep useful
将起作用