应该把这个问题移到stackoverflow吗?
我经常需要使用log4j读取Java应用程序生成的日志文件。通常,一条记录的消息(我们称其为日志条目)跨越多行。例子:
INFO 10:57:01.123 [Thread-1] [Logger1] This is a multi-line
text, two lines
DEBUG 10:57:01.234 [Thread-1] [Logger2] This entry takes 3 lines
line 2
line 3
请注意,每个日志条目都从新行开始,并且该行的第一个单词是TRACE,DEBUG,INFO或ERROR,并且至少有一个空格。在这里,有2个日志条目,第一个在毫秒123,另一个在毫秒234。
我想要一个快速命令(使用sed / grep / awk / etc的组合)来过滤日志条目(仅grep过滤行),例如:删除所有包含文本'Logger2'的日志条目。
我考虑过进行以下转换:
1)以特殊的字符序列(例如:##)连接属于相同日志条目的行;这样,所有日志条目将仅占一行
INFO 10:57:01.123 [Thread-1] [Logger1] This is a multi-line##text, two lines
DEBUG 10:57:01.234 [Thread-1] [Logger2] This entry takes 3 lines##line 2##line 3
2)grep
3)将行拆分回去(即:将##替换为\ n)
我在步骤1遇到了麻烦-我对sed没有足够的经验。
也许不需要上述3个步骤,也许sed可以完成所有工作。
无需混合许多乐器。任务可以这样做sed
只
sed '/^INFO\|^DEBUG\|^TRACE\|^ERROR/{
/Logger2/{
:1
N
/\nINFO\|\nDEBUG\|\nTRACE\|\nERROR/!s/\n//
$!t1
D }
}' log.entry
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句