यह फ़ाइल लाइन को लाइन से उलट देता है।
sed '1! G; h; $; d' फ़ाइल
सबसे पहले, sedएक पकड़ स्थान और एक पैटर्न स्थान है । हमें उस विशिष्ट कमांड पर ध्यान केंद्रित करने से पहले उनके बीच अंतर करना होगा।
जब sedएक नई लाइन पढ़ता है, तो इसे पैटर्न स्पेस में लोड किया जाता है। इसलिए, हर बार एक नई लाइन संसाधित होने पर वह स्थान अधिलेखित हो जाता है। दूसरी ओर, होल्ड स्पेस पूरे प्रसंस्करण पर सुसंगत है और मूल्यों को बाद में उपयोग के लिए संग्रहीत किया जा सकता है।
आदेश के लिए:
इस बयान में 3 आदेशों हैं: 1!G, hऔर$!d
1!Gइसका मतलब है कि Gकमांड को पहले एक ( !नेगेट 1) को छोड़कर हर लाइन पर निष्पादित किया जाता है । Gसाधन करने के लिए संलग्न क्या पैटर्न अंतरिक्ष में पकड़ अंतरिक्ष में है।
hहर लाइन पर लागू होता है। यह पैटर्न स्पेस को होल्ड स्पेस पर कॉपी करता है (और इसे ओवरराइट करता है)।
$!dपिछले एक को छोड़कर हर पंक्ति पर लागू होता है ( $अंतिम पंक्ति का प्रतिनिधित्व करता है, !इसे नकारता है)। dलाइन (पैटर्न स्पेस) को हटाने के लिए कमांड है।
- अब, जब पहली पंक्ति पढ़ी जाती है,
sedतो hकमांड निष्पादित करता है । पहली पंक्ति को होल्ड स्पेस में कॉपी किया जाता है। तब इसे हटा दिया जाता है, क्योंकि यह $!स्थिति से मेल खाता है । sedदूसरी पंक्ति के साथ जारी है।
- दूसरी पंक्ति स्थिति से मेल खाती है
1!(यह पहली पंक्ति नहीं है), और इसलिए होल्ड स्पेस (जिसमें पहली पंक्ति है) को पैटर्न स्पेस (जिसमें दूसरी पंक्ति है) से जोड़ा जाता है। उसके बाद, पैटर्न स्पेस में, अब दूसरी लाइन है जिसके बाद पहली लाइन है, जिसे एक नई लाइन द्वारा सीमांकित किया गया है। अब, hकमांड लागू होता है (हर पंक्ति में); पैटर्न स्पेस में है कि सभी पकड़ अंतरिक्ष के लिए नकल की है। तीसरा कथन ( $!d) लागू होता है: लाइन को पैटर्न स्थान से हटा दिया जाता है।
- चरण 2 अब सभी लाइनों के साथ किया जाता है। हम अंतिम पंक्ति पर जाते हैं।
- अंतिम पंक्ति (
$) में चरण 2 के लगभग सभी कार्य किए जाते हैं, लेकिन हटाए गए भाग ( d) में नहीं। sed, जब बिना आह्वान किया जाता है -n, प्रत्येक इनपुट लाइन के लिए प्रसंस्करण के अंत में पैटर्न स्पेस को स्वचालित रूप से प्रिंट करता है। इसलिए, जब हटाया नहीं जाता है, तो पैटर्न स्थान मुद्रित किया जाता है। इसमें अब उलटी क्रम में सभी लाइनें हैं ।