我有一個fail2ban.log從中我想從「禁止」字符串中獲取特定字段。我可以在當時使用正則表達式獲取我需要的數據,但我無法將它們合併。典型的'fail2ban'日誌文件有很多字符串。我感興趣的字符串這樣的:用於匹配ruby上的3個模式的Ruby腳本
2012-05-02 14:47:40,515 fail2ban.actions: WARNING [ssh-iptables] Ban 84.xx.xx.242
XX =數字(數字)
我要搶:a)日期和時間,B)班(關鍵字),C)的IP地址
這裏是我的正則表達式:
IP = (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
日期&時間= ^(\d{4}\W\d{2}\W\d{2}\s\d{2}\W\d{2}\W\d{2})
我的問題在於,我怎樣才能將這三者結合在一起。我嘗試了這樣的事情:
^(?=^\d{4}\W\d{2}\W\d{2}\s\d{2}\W\d{2}\W\d{2})(?=\.*d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$)(?=^(?Ban).)*$).*$
但是不行,因爲我也想。
舉一個更清晰的例子,這裏就是我想:
greyjewel:FailMap atma$ cat fail2ban.log |grep Ban|awk -F " " '{print $1, $2, $7}'|tail -n 3
2012-05-02 14:47:40,515 84.51.18.242
2012-05-03 00:35:44,520 202.164.46.29
2012-05-03 17:55:03,725 203.92.42.6
問候
一般情況下,'grep的富希望他們| awk'{bar}''最好寫成'awk'/ foo/{bar}'',不需要grep。 –
可以請你提供一個全功能的例子,這將使用awk工作嗎?我的文件在這種情況下被稱爲'fail2ban.log',我想抓住所有具有'禁止'字樣的行,然後打印$ 1,$ 2和$ 7字段。感謝您的回覆:-) –
'awk'/ Ban/{print $ 1,$ 2,$(NF-1),$ NF}'fail2ban.log' 或者,爲避免誤報,awk'$(NF -1)==「禁止」{print $ 1,$ 2,$(NF-1),$ NF}'fail2ban.log' –