लेबल :a
को मुख्य निर्देश के बाहर रखने की आवश्यकता नहीं है , न ही -e
विकल्प की आवश्यकता है; अंत में, शानदार /$/
है (हर पंक्ति में एक ईओएल चरित्र है)।
अन्य उत्तरों में सुधार, एक हो जाता है
sed -i ':a; N; s/\n/ /; ta' file
जो स्पष्ट है यदि इस प्रकार लिखा जाए,
sed -i ':a
N
s/\n/ /
ta' file
आदेश निम्नानुसार काम करता है:
N
अगली लाइन को (बहुस्तरीय) पैटर्न स्पेस में जोड़ता है, जिसमें पहले से ही मौजूद लाइन होती है;
s/\n/ /
स्थान के साथ \n
उत्पन्न न्यूलाइन वर्ण को स्थानापन्न करें ;N
ta
:a
जब तक चरण 2 में प्रतिस्थापन के रूप में लेबल के बाद स्क्रिप्ट लाइन पर जाता है, तब तक सफल रहा , यानी यदि प्रतिस्थापन हुआ, तो निष्पादन स्क्रिप्ट के अंत को "1" किए बिना चरण 1 पर कूद जाता है, अर्थात इनपुट की दूसरी पंक्ति को पढ़े बिना ।
निम्नलिखित पर ध्यान दें;
sed
पहली पंक्ति से शुरू करके क्रम में एक-एक करके इनपुट फ़ाइल की पंक्तियों को पढ़ता है ;
:a
सिर्फ एक लेबल है, जिसे निष्पादित करने की आज्ञा नहीं है;
N
सिद्धांत रूप में, किसी भी लाइन पर निष्पादित किया जाता है, लेकिन
s/\n/ /
(सिद्धांत में किसी भी लाइन पर निष्पादित) किसी भी लाइन पर सफल होता है , लेकिन आखिरी
ta
स्क्रिप्ट की समाप्ति केवल तभी होती है जब इनपुट की अंतिम पंक्ति पढ़ी जाती है (केवल एक पंक्ति जहां s
विफल होती है), इसलिए
- कोई आगे इनपुट लाइन के बाद पैटर्न अंतरिक्ष में पढ़ा जाता है 1 एक इसे में पढ़ा जाता है जब तक, पिछले एक में पढ़ने के लिए है, लेकिन फिर वहाँ में पढ़ने के लिए आगे कोई लाइन है, और अंतर्निहित
p
आदेश निष्पादित किया जाता है।
इसलिए स्क्रिप्ट मूल रूप से इनपुट की पहली पंक्ति में पढ़ती है और एक-एक करके नई लाइनों को प्रतिस्थापित करते हुए हर बार एक-एक करके निम्नलिखित पंक्तियों को जोड़ती रहती है; अंतिम पंक्ति को जोड़ने के बाद (और \n
एक स्थान में बदल दिया गया है), N
किसी भी रेखा को जोड़ नहीं सकता है, s
विफल रहता है, ta
छोड़ दिया जाता है, स्क्रिप्ट के अंत तक पहुँच जाता है, और निहित p
रिन्ट स्टेटमेंट को वर्तमान लूंग 1-लाइन पैटर्न स्पेस पर निष्पादित किया जाता है ।
-i
विकल्प इनपुट फ़ाइल विकल्प file
पूरे 1-लाइन पैटर्न अंतरिक्ष के साथ।