मैं एक मेलबॉक्स फ़ाइल पार्स कर रहा हूं जो असफलता से वितरित ई-मेल के लिए ई-मेल सर्वर रिपोर्ट संग्रहीत करता है। मैं खराब ई-मेल पते निकालना चाहता हूं, ताकि मैं उन्हें सिस्टम से हटा दूं। लॉग फ़ाइल इस तरह दिखती है:
...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 / पर्ल / पायथन स्क्रिप्ट लिख सकता था, लेकिन मुझे आश्चर्य है कि अगर यह grep या किसी अन्य मानक उपकरण के साथ संभव है। मैंने -B पैरामीटर को नकारात्मक ऑफसेट देने की कोशिश की:
grep -A 2 -B -2 "The mail system" mbox_file
लेकिन जीआरपी शिकायत करता है:
grep: -2: invalid context length argument
क्या grep के साथ ऐसा करने का कोई तरीका है?