Estoy analizando un archivo de buzón que almacena informes del servidor de correo electrónico para el correo electrónico entregado sin éxito. Deseo extraer direcciones de correo electrónico incorrectas, de modo que las elimine del sistema. El archivo de registro se ve así:
...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.
La dirección de correo electrónico viene 2 líneas después de una línea con "El sistema de correo". Usar grep de esta manera me da la línea "El sistema de correo" y las siguientes dos líneas:
grep -A 2 "The mail system" mbox_file
Sin embargo, no sé cómo eliminar la línea "El sistema de correo" y la segunda línea vacía de esta salida. Creo que podría escribir un script PHP / Perl / Python para hacerlo, pero me pregunto si esto es posible con grep o alguna otra herramienta estándar. Traté de dar un desplazamiento negativo al parámetro -B:
grep -A 2 -B -2 "The mail system" mbox_file
Pero grep se queja:
grep: -2: invalid context length argument
¿Hay alguna manera de hacer esto con grep?