Analisando o arquivo de log e imprimindo backreferences regex

3

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?

    
por funkadelic 21.06.2011 / 03:42

2 respostas

1

Usando sed :

sed -r -n 's/^.* from=<([^>]+)>\s*to=<([^>]+)>.*$/ /p' /var/log/maillog
    
por 21.06.2011 / 07:28
2

Este usa quantificadores regex e não-guloso simplificados:

perl -ne 's/^.*from=<(.+?@.+?)> to=<(.+?@.+?)>.*$/$1 $2/; print;' /var/log/maillog
    
por 21.06.2011 / 04:46