Linux sed कमांड संपूर्ण गाइड

अवलोकन

लिनक्स वातावरण में टेक्स्ट फ़ाइल की सामग्री को तेज़ी से और सटीक रूप से बदलने और संपादित करने के लिए एक शक्तिशाली स्ट्रीम एडिटर, sed कमांड का परिचय दिया गया है। बुनियादी स्ट्रिंग प्रतिस्थापन से लेकर विशिष्ट पंक्तियों को हटाने, और बैकअप के साथ फ़ाइलों को सीधे संशोधित करने वाले इनलाइन (-i) विकल्प तक, व्यावहारिक उदाहरणों के माध्यम से आसानी से सीखें।

1. अभ्यास वातावरण तैयार करना और sed बुनियादी स्ट्रिंग प्रतिस्थापन (s कमांड)

sed कमांड का सुरक्षित अभ्यास करने के लिए एक समर्पित डायरेक्टरी बनाने और उसमें जाने के लिए mkdir -p ~/sed_practice && cd ~/sed_practice कमांड चलाएँ।

mkdir -p ~/sed_practice && cd ~/sed_practice

स्ट्रिंग प्रतिस्थापन अभ्यास में उपयोग किए जाने वाले उदाहरण टेक्स्ट को तैयार करने के लिए echo -e 'apple is delicious\nbanana is yellow\napple is red' > fruits.txt कमांड चलाकर फ़ाइल में सामग्री लिखें।

echo -e ‘apple is delicious\nbanana is yellow\napple is red’ > fruits.txt

sed कमांड एक स्ट्रीम एडिटर है जो टेक्स्ट स्ट्रीम को प्रोसेस और एडिट करता है।
s प्रतिस्थापन ऑपरेटर का उपयोग करके प्रत्येक पंक्ति में पाए जाने वाले पहले apple स्ट्रिंग को orange से बदलकर स्क्रीन पर प्रदर्शित किया जाता है।
मूल फ़ाइल fruits.txt की सामग्री में कोई बदलाव नहीं होता है और केवल मानक आउटपुट (standard output) में परिणाम प्रदर्शित होता है।
⚙️ [मुख्य विकल्प]

-i : आउटपुट परिणाम को स्क्रीन पर दिखाने के बजाय सीधे मूल फ़ाइल को संशोधित करके सहेजता है।
-e : एक साथ कई संपादन स्क्रिप्ट कमांड को जोड़कर निष्पादित करता है।
-n : पैटर्न स्पेस के स्वचालित आउटपुट को रोकता है और केवल स्पष्ट रूप से निर्दिष्ट पंक्तियों को प्रिंट करता है।
-E या -r : विस्तारित नियमित अभिव्यक्ति (ERE) सिंटैक्स को सक्षम करके उपयोग करता है।

sed ’s/apple/orange/’ fruits.txt

प्रतिस्थापन अभिव्यक्ति के अंत में g ध्वज (flag) जोड़ने पर यह एक पंक्ति में मेल खाने वाले सभी लक्ष्यों को वैश्विक (global) स्तर पर बदल देता है।
इसका उपयोग तब किया जाता है जब प्रत्येक पंक्ति में समान खोज शब्द कई बार मौजूद हों और आप उन सभी को बिना छोड़े बदलना चाहते हों।

sed ’s/apple/orange/g’ fruits.txt

2. विशिष्ट पंक्तियों का चयनित आउटपुट और पंक्तियाँ हटाना (d और -n विकल्प)

पंक्ति चयन और हटाने के अभ्यास के लिए आवश्यक लॉग डेटा तैयार करने हेतु echo -e 'Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK' > server.log कमांड चलाकर एक उदाहरण फ़ाइल बनाएँ।

echo -e ‘Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK’ > server.log

-n विकल्प और p कमांड को मिलाकर निर्दिष्ट सीमा यानी पंक्ति 2 से पंक्ति 3 तक ही स्क्रीन पर आउटपुट प्रदर्शित किया जाता है।
यह डिफ़ॉल्ट स्वचालित आउटपुट को दबाने और केवल इच्छित विशिष्ट पंक्तियों को फ़िल्टर करके देखने के लिए उपयोगी है।

sed -n ‘2,3p’ server.log

d कमांड और पैटर्न मिलान का उपयोग करके Warning स्ट्रिंग वाली पंक्तियों को छोड़कर शेष सामग्री को स्क्रीन पर प्रदर्शित किया जाता है।
इसका उपयोग अनावश्यक लॉग या विशिष्ट स्थिति वाली पंक्तियों को फ़िल्टर करके जाँचने के लिए किया जाता है।

sed ‘/Warning/d’ server.log

एक विशिष्ट पंक्ति संख्या निर्दिष्ट करके और d कमांड चलाकर दूसरी पंक्ति को हटाने का परिणाम स्क्रीन पर प्रदर्शित किया जाता है।
इसका उपयोग किसी विशिष्ट पंक्ति संख्या की लाइन को हटाकर फ़ाइल सामग्री देखने के लिए किया जाता है।

sed ‘2d’ server.log

3. मूल फ़ाइल का सीधा संशोधन और स्वचालित बैकअप (-i विकल्प)

कॉन्फ़िगरेशन फ़ाइल संशोधन अभ्यास के लिए पर्यावरण चर (environment variable) के उदाहरण डेटा से युक्त config.env फ़ाइल बनाएँ।

echo -e ‘PORT=8080\nDEBUG=true\nTIMEOUT=30’ > config.env

-i.bak विकल्प का उपयोग करके मूल फ़ाइल की बैकअप कॉपी config.env.bak बनाई जाती है, और साथ ही DEBUG=true सेटिंग को तुरंत DEBUG=false से बदलकर मूल फ़ाइल में सहेज दिया जाता है।
इसका उपयोग परिवर्तन से पहले की स्थिति को सुरक्षित रखते हुए मूल फ़ाइल को सीधे संशोधित करने के लिए किया जाता है।

sed -i.bak ’s/DEBUG=true/DEBUG=false/’ config.env

cat कमांड से संशोधित config.env फ़ाइल की सामग्री की जाँच करें।
आप देख सकते हैं कि DEBUG मान सफलतापूर्वक false में बदल गया है और फ़ाइल में दिखाई दे रहा है।

cat config.env

स्वचालित रूप से उत्पन्न बैकअप फ़ाइल config.env.bak की सामग्री प्रदर्शित करके जाँच करें।
संशोधन से पहले की मूल सामग्री DEBUG=true स्थिति वैसी ही बनी हुई है, जिससे यह पुष्टि होती है कि इसका सुरक्षित बैकअप ले लिया गया है।

cat config.env.bak

4. नियमित अभिव्यक्ति (Regex) और सीमांकक (Delimiter) परिवर्तन का उपयोग करके उन्नत टेक्स्ट प्रतिस्थापन

पाथ प्रतिस्थापन अभ्यास में उपयोग किए जाने वाले फ़ाइल पाथ उदाहरण डेटा को उत्पन्न करने के लिए echo कमांड से paths.txt फ़ाइल में सामग्री लिखें।

echo -e ‘Old path: /usr/local/bin\nNew path: /usr/local/bin’ > paths.txt

डिफ़ॉल्ट सीमांकक स्लैश (/) के बजाय पाइप (|) प्रतीक को प्रतिस्थापन सीमांकक के रूप में उपयोग करके, पाथ के भीतर /usr/local/bin को सुरक्षित रूप से /usr/bin से बदलकर आउटपुट किया जाता है।
स्लैश युक्त फ़ाइल पाथ या URL से निपटते समय, आप एस्केप वर्ण (\) के बिना साफ़-सुथरे तरीके से एक्सप्रेशन लिख सकते हैं।

sed ’s|/usr/local/bin|/usr/bin|g’ paths.txt

नियमित अभिव्यक्ति का उपयोग करके व्हाइटस्पेस हटाने का अभ्यास करने के लिए आगे और पीछे रिक्त स्थान वाली spaces.txt उदाहरण फ़ाइल बनाएँ।

echo -e ’   leading spaces\nno spaces\n   trailing removed   ’ > spaces.txt

पंक्ति की शुरुआत को इंगित करने वाले ^ प्रतीक और स्पेस तथा टैब वर्णों को निर्दिष्ट करने वाले [ \t]* रेगुलर एक्सप्रेशन का मिलान करके, प्रत्येक पंक्ति की शुरुआत में स्थित सभी रिक्त स्थानों को हटाकर आउटपुट किया जाता है।
दस्तावेजों या लॉग डेटा के इंडेंटेशन स्पेस को एक साथ साफ़ करने के लिए यह बहुत उपयोगी है।

sed ’s/^[ \t]*//’ spaces.txt

अब तक, हमने लिनक्स sed कमांड के बुनियादी टेक्स्ट प्रतिस्थापन से लेकर बल्क फ़ाइलों के बैच संपादन तक के मुख्य उपयोगों को देखा है।
चूँकि यह एक शक्तिशाली उपकरण है जो दोहराए जाने वाले फ़ाइल संपादन कार्यों को काफी कम कर देता है, आवश्यकता पड़ने पर इसका आसानी से उपयोग करें।