我想解析 my以打印出和/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
答案2
使用sed:
sed -r -n 's/^.* from=<([^>]+)>\s*to=<([^>]+)>.*$/\1 \2/p' /var/log/maillog