電子メールアドレスを内部および外部に印刷するために解析したい/var/log/maillog
(主に構成されたDNS RBLで誤検出をすばやく確認するため)。from=<>
to=<>
メールログエントリは次のとおりです(サフィックス)。
Jun 20 17:27:52 foobarserver postfix/smtpd[15925]: NOQUEUE: reject: RCPT from sbr.nouveauquebec.com[184.22.154.110]: 554 5.7.1 Service unavailable; Sender address [[email protected]] blocked using urired.spameatingmonkey.net; Red listed, see http://spameatingmonkey.com/lookup/nouveauquebec.com; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<sbr.nouveauquebec.com>
私の正規表現は
from=<(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b)> to=<(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b)>
後で参照できる項目を保存して\1
印刷\2
したいです。私が望むのは、出力をパイプcat /var/log/maillog
し、各行に正規表現を適用し、逆参照を出力することです。
これを達成するための迅速な方法はありますか?
ベストアンサー1
これは単純化された正規表現と貪欲ではない数量子を使用します。
perl -ne 's/^.*from=<(.+?@.+?)> to=<(.+?@.+?)>.*$/$1 $2/; print;' /var/log/maillog