我想从我的日志文件中提取<
到下一个。使用正则表达式提取子字符串
$>cat messages.log
2013-03-24 19:32:37.231 <F280 [192.168.178.22]:5000 -- Unknown>, Msg:[Test1]
2013-03-24 19:32:37.547 <F281 [192.168.178.22]:5000 -- Unknown>, Msg:[Test2
Test3
Test4]
2013-03-24 19:32:38.833 <F280 [192.168.178.22]:5000 -- Unknown>, Msg:[Test5]
2013-03-24 19:32:42.222 <F281 [192.168.178.22]:5000 -- Unknown>, Msg:[Test6]
$>sed 's/.*\<\(.*\) \[.*/\1|/g' messages.log
F280|
F281|
Test3
Test4]
F280|
F281|
我几乎得到了我想要的,除了换行符的输出。所以我想得到以下结果:
F280|F281|F280|F281
正则表达式是怎样的?
到目前为止,它改善了输出效果,效果更好,但如果将其应用于整个日志文件,还会打印更多不需要的值。我对awk并不熟悉,但可能您有一个想法如何解决此消息:“Msg:[Test5 \ n AAA/BBB CCC DDD \ n EEE FFF]”=>这会导致不知怎的,“CCC”! – janr 2013-03-28 12:43:58
那么你可以过滤什么?你想要什么线是独特的?如果他们以'2013'开头'awk -F'[<]''/^2013/{s?s = s“|”$ 4:s = s $ 4} END {print s}'file'就足够了? – 2013-03-28 13:15:37
是的,它做到了,但我将“2013”更改为“[0-9] +”!为什么“[0-9] {4}”不能用awk工作? – janr 2013-03-28 14:03:30