ฉันกำลังแยกวิเคราะห์ไฟล์เมลที่เก็บเซิร์ฟเวอร์รายงานเพื่อส่งอีเมลไม่สำเร็จ ฉันต้องการแยกที่อยู่อีเมลที่ไม่ดีออกเพื่อให้ฉันลบออกจากระบบ ล็อกไฟล์มีลักษณะดังนี้:
...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.
ที่อยู่อีเมลมี 2 บรรทัดหลังจากบรรทัดที่มี "ระบบจดหมาย" การใช้ grep เช่นนี้ทำให้ฉันได้รับ "ระบบจดหมาย" และอีกสองบรรทัดถัดไป:
grep -A 2 "The mail system" mbox_file
อย่างไรก็ตามฉันไม่ทราบวิธีลบบรรทัด "ระบบเมล" และบรรทัดที่สองว่างจากเอาต์พุตนี้ ฉันเดาว่าฉันสามารถเขียนสคริปต์ PHP / Perl / Python ได้ แต่ฉันสงสัยว่ามันเป็นไปได้ด้วย grep หรือเครื่องมือมาตรฐานอื่น ๆ ฉันพยายามที่จะให้การชดเชยเชิงลบกับพารามิเตอร์ -B:
grep -A 2 -B -2 "The mail system" mbox_file
แต่ grep บ่น:
grep: -2: invalid context length argument
มีวิธีการทำเช่นนี้กับ grep หรือไม่?