स्ट्रीम संपादक - लूप्स

अन्य प्रोग्रामिंग भाषाओं की तरह, SED भी निष्पादन के प्रवाह को नियंत्रित करने के लिए एक लूपिंग और ब्रांचिंग सुविधा प्रदान करता है। इस अध्याय में, हम SED में लूप और शाखाओं का उपयोग करने के तरीके के बारे में अधिक जानने जा रहे हैं।

SED में एक लूप एक के समान काम करता है gotoबयान। SED लेबल द्वारा चिह्नित लाइन पर कूद सकता है और शेष कमांड को निष्पादित करना जारी रख सकता है। SED में, हम एक परिभाषित कर सकते हैंlabel निम्नलिखित नुसार:

:label 
:start 
:end 
:up

उपर्युक्त उदाहरण में, बृहदान्त्र के बाद एक नाम (:) का अर्थ लेबल नाम है।

किसी विशिष्ट लेबल पर जाने के लिए, हम इसका उपयोग कर सकते हैं bलेबल नाम के बाद कमांड। यदि लेबल नाम छोड़ा गया है, तो SED SED फ़ाइल के अंत में कूदता है।

हमें छोरों और शाखाओं को समझने के लिए एक सरल SED स्क्रिप्ट लिखें। हमारी Books.txt फ़ाइल में, पुस्तक के शीर्षक और उनके लेखकों की कई प्रविष्टियाँ हैं। निम्न उदाहरण एक पुस्तक शीर्षक और उसके लेखक का नाम एक पंक्ति में एक अल्पविराम द्वारा अलग करता है। फिर यह "पाउलो" पैटर्न की खोज करता है। यदि पैटर्न मेल खाता है, तो यह लाइन के सामने एक हाइफ़न (-) प्रिंट करता है, अन्यथा यह कूदता हैPrint लेबल जो लाइन प्रिंट करता है।

[jerry]$ sed -n ' 
h;n;H;x 
s/\n/, / 
/Paulo/!b Print 
s/^/- / 
:Print 
p' books.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
- The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
- The Pilgrimage, Paulo Coelho
A Game of Thrones, George R. R. Martin

पहली नज़र में, उपरोक्त स्क्रिप्ट गुप्त लग सकती है। आइए हम इसे ध्वस्त करते हैं।

  • पहले दो आदेश स्व-व्याख्यात्मक हैं h;n;H;x तथा s/\n/, / पुस्तक शीर्षक और उसके लेखक को एक अल्पविराम (,) से मिलाएं।

  • तीसरा कमांड लेबल पर कूदता है Print केवल जब पैटर्न मेल नहीं खाता है, अन्यथा चौथे कमांड द्वारा प्रतिस्थापन किया जाता है।

  • :Print एक लेबल नाम है और जैसा कि आप पहले से ही जानते हैं, p प्रिंट कमांड है।

पठनीयता में सुधार के लिए, प्रत्येक SED कमांड को एक अलग लाइन पर रखा गया है। हालाँकि, कोई भी एक पंक्ति में सभी कमांड्स को एक पंक्ति में रखने का विकल्प चुन सकता है:

[jerry]$ sed -n 'h;n;H;x;s/\n/, /;/Paulo/!b Print; s/^/- /; :Print;p' books.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
- The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
- The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin