我想從我的日誌文件中提取<
到下一個。使用正則表達式提取子字符串
$>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