Ich analysiere eine Postfachdatei, in der E-Mail-Serverberichte für nicht erfolgreich zugestellte E-Mails gespeichert sind. Ich möchte ungültige E-Mail-Adressen extrahieren, damit ich sie aus dem System entferne. Die Protokolldatei sieht folgendermaßen aus:
...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.
E-Mail-Adresse kommt 2 Zeilen nach einer Zeile mit "Das Mail-System". Wenn ich grep so benutze, bekomme ich die Zeile "Das Mail-System" und die nächsten beiden Zeilen:
grep -A 2 "The mail system" mbox_file
Ich weiß jedoch nicht, wie ich die Zeile "Das Mailsystem" und die zweite leere Zeile aus dieser Ausgabe entfernen soll. Ich denke, ich könnte PHP / Perl / Python-Skript schreiben, aber ich frage mich, ob dies mit grep oder einem anderen Standard-Tool möglich ist. Ich habe versucht, dem Parameter -B einen negativen Offset zuzuweisen:
grep -A 2 -B -2 "The mail system" mbox_file
Aber grep beschwert sich:
grep: -2: invalid context length argument
Gibt es eine Möglichkeit, dies mit grep zu tun?