Estou analisando um arquivo de caixa de correio que armazena relatórios do servidor de email para emails entregues sem êxito. Desejo extrair endereços de email incorretos, para removê-los do sistema. O arquivo de log fica assim:
...some content...
The mail system
<slavicatomic118@hotmail.com>: host mx1.hotmail.com[65.54.188.94] said: 550
Requested action not taken: mailbox unavailable (in reply to RCPT TO
command)
...some content...
The mail system
<oki88@optimumpro.net>: host viking.optimumpro.net[79.101.51.82] said: 550
Unknown user (in reply to RCPT TO command)
...some content...
The mail system
<sigirna_luka@yahoo.com>: host mta5.am0.yahoodns.net[74.6.140.64] said: 554
delivery error: dd This user doesn't have a yahoo.com account
(sigirna_luka@yahoo.com) [0] - mta1172.mail.sk1.yahoo.com (in reply to end
of DATA command)
...etc.
O endereço de e-mail vem 2 linhas após uma linha com "O sistema de e-mail". Usar grep como este me dá a linha "O sistema de correio" e as próximas duas linhas:
grep -A 2 "The mail system" mbox_file
No entanto, não sei como remover a linha "O sistema de email" e a segunda linha vazia desta saída. Eu acho que eu poderia escrever script PHP / Perl / Python para fazer isso, mas gostaria de saber se isso é possível com grep ou alguma outra ferramenta padrão. Eu tentei dar deslocamento negativo para o parâmetro -B:
grep -A 2 -B -2 "The mail system" mbox_file
Mas o grep reclama:
grep: -2: invalid context length argument
Existe uma maneira de fazer isso com o grep?