Usando sed :
sed -r -n 's/^.* from=<([^>]+)>\s*to=<([^>]+)>.*$/ /p' /var/log/maillog
Eu quero analisar meu /var/log/maillog
para imprimir os endereços de e-mail em from=<>
e to=<>
(principalmente para fazer uma rápida verificação de falsos positivos nas RBLs de DNS que eu configurei)
Uma entrada do maillog se parece com isso (postfix):
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>
e meu regex é
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)>
Estou armazenando as correspondências nas referências anteriores e
que desejo imprimir. O que eu quero fazer é canalizar a saída de
cat /var/log/maillog
e aplicar a regex em cada linha e gerar as referências anteriores.
Existe uma maneira rápida de conseguir isso?
Este usa quantificadores regex e não-guloso simplificados:
perl -ne 's/^.*from=<(.+?@.+?)> to=<(.+?@.+?)>.*$/$1 $2/; print;' /var/log/maillog