'Ban'文字列から特定のフィールドを取得したいfail2ban.logがあります。一度に1つずつ正規表現を使用して必要なデータを取得できますが、それらを組み合わせることができません。典型的な「fail2ban」ログファイルには多くの文字列があります。私はこれらのような文字列に興味があります:
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})
ここでの私の問題は、これら3つをどのように組み合わせることができるかということです。私はこのようなことを試みました:
^(?=^\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
よろしくお願いします