बैश सेड उदाहरण

Bash Sed Examples



बैश आपको (${var/pattern/replacement}) जैसे परिवर्तनीय विस्तार का उपयोग करके पैटर्न प्रतिस्थापन करने की अनुमति देता है। और इसलिए, sed इस तरह (sed -e 's/pattern/replacement/') करता है। हालाँकि, पाठ फ़ाइलों में पैटर्न को बदलने की तुलना में sed के लिए और भी बहुत कुछ है। यहां हम sed को फिर से खोजेंगे, उदाहरण के लिए, दिन-प्रतिदिन के कार्यों में सहायता के लिए समकक्ष कमांड और वर्कफ़्लो के साथ।

sed उदाहरणों के लिए सेटअप

उदाहरण के लिए सेट अप करने के लिए यहां एक त्वरित मार्गदर्शिका दी गई है, जिसे मैं बहुत अधिक नहीं बनाने की कोशिश करूंगा।







शब्दोंएक टेक्स्ट फ़ाइल है जिसमें संख्या 1 से 100 तक होती है। यदि आप इसे बनाने के लिए कमांड के बारे में अनिश्चित हैं, तो बैश एक्सपोर्ट कमांड में xargs के लिए निर्यात फ़ंक्शन देखें। आप कभी नहीं जानते कि यह आपके अगले शेल स्क्रिप्टिंग साक्षात्कार पर हो सकता है।



छड़एक पाठ फ़ाइल है जिसमें एक पंक्ति है —.



पुराना-phpपुरानी PHP की पंक्तियों वाली एक टेक्स्ट फ़ाइल है जो php7 या बाद में टूट जाएगी। (संकेत: ईरेग)





ध्यान दें कि ऊपर वर्णित सभी कार्य सेटअप के लिए कार्यों पर एंडनोट में नीचे पाए जा सकते हैं।

समकक्ष आदेशों के साथ सेड उदाहरण

एक कमांड लाइन वातावरण में, आप पाएंगे कि किसी दिए गए कार्य के लिए एक से अधिक समाधान हैं। हालांकि, अधिकांश भाग के लिए, आप उस पथ के साथ जाना चाहते हैं जो कम से कम प्रतिरोध उत्पन्न करता है। यहां sed कमांड के उदाहरणों की एक सूची इसी समकक्ष कमांड के साथ दी गई है, जहां कुछ को नीचे विस्तार से कवर किया जाएगा।



1. एक रैंडम लाइन प्रिंट करें (सॉर्ट -R - | हेड -1 के बराबर)

एसईडी -एन '$((रैंडम% 100))पी'-

2. फ़ाइल में अंतिम पंक्ति को प्रिंट करें (शीर्ष -1 के बराबर -)

एसईडी -एन '$पी'-

3. एक फ़ाइल में पहली १० पंक्तियों को प्रिंट करें (हेड-एन १०- के बराबर)

एसईडी '10q'-

4. फ़ाइल में पहली पंक्ति प्रिंट करें (पूंछ -1 के बराबर -)

एसईडी -एन '1p'-

5. किसी वर्ण के सभी उदाहरण हटाएं (tr -delete '0' के बराबर -, जहां 0 वह वर्ण है जिसे हम हटाना चाहते हैं)

एसईडी -और 'एस / 0 // जी'-

6. csv फ़ाइल को tsv में बदलें (tr ',' ' ' - के बराबर)

एसईडी -और 'एस/,/ टी/जी'-

7. फ़ाइल में लाइन जोड़ें (कैट बार के बराबर -)

एसईडी '$ ए ---'-

8. फाइल करने के लिए लाइन प्रीपेन्ड करें (कैट-बार के बराबर)

एसईडी '1i---'-

9. फ़ाइल में सभी पंक्तियों का प्रिंट आउट लें (बिल्ली के बराबर -)

एसईडी -एन -और 'पी'-

10. एक पैटर्न से मेल खाने वाली लाइनें प्रिंट करें (grep -e '^1' - के बराबर)

एसईडी -एन -और '/^1/ पी'-

11. पैटर्न से मेल खाने वाली लाइनें हटाएं (grep -v -e '^1' - के बराबर)

एसईडी -और '/^1/ घ'-

12. फ़ाइल में पंक्तियों की संख्या प्राप्त करें (wc -l - के बराबर)

एसईडी -एन -और '$ ='-

13. पृष्ठभूमि में एक फ़ाइल को लिखें (समकक्ष कमांड टी)

एसईडी 'में$ {1}'-

टी कमांड को लागू करने के लिए sed का उपयोग करने वाला उदाहरण

ठीक ऊपर, पृष्ठभूमि में एक फ़ाइल में लिखें लेबल वाला एक उदाहरण है। टी कमांड की तरह लगता है। यह ठीक है। यहां हम विस्तार करेंगे कि sed का उपयोग करके टी को बैश में बदलने के लिए फ़ंक्शन को कैसे कार्यान्वित किया जाए।

आदेश

टी ()
{
परीक्षण $ {#} -ईक्यू 1 || वापसी;
एसईडी 'में$ {1}'-
}
मुख्य()
टीयह;
बिल्लीयह

मुख्य

उत्पादन

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

यहां आपको 1 से 10 तक के पूर्णांकों की दो सूचियां दिखाई देंगी। पहली seq कमांड से है। दूसरा हमें टी में लिखी फाइल की कैट से मिलता है। मुझे पता है कि यह हास्यास्पद है लेकिन यह काम करता है!

एक फ़ाइल में एक यादृच्छिक रेखा को प्रिंट करने के लिए sed का उपयोग करने वाला उदाहरण

मान लीजिए कि हम बैश और थोड़े से सेड का उपयोग करके एक फ़ाइल में एक यादृच्छिक रेखा का प्रिंट आउट लेना चाहते हैं। क्या हम इसे कर सकते हैं? हाँ हम कर सकते हैं! ऐसे।

एक फ़ंक्शन लागू करें जो

  1. फ़ाइल में पंक्तियों की संख्या प्राप्त करें, L
  2. 1 और L के बीच एक यादृच्छिक संख्या उत्पन्न करता है, R
  3. प्रिंट आर

फ़ंक्शन इनपुट को बाहर से पाइप किए जाने की अपेक्षा करता है।

आदेश

कुछ-पंक्ति()
{
समारोहनियंत्रण रेखा()
{
एसईडी -एन -और '$ ='-
};
समारोहप्रिंट लाइन()
{
एसईडी -एन -और '$ {1}पी'-
};
अस्थायी= $( एमकेटेम्प );
बिल्ली-> ${अस्थायी};
बिल्ली ${अस्थायी} |प्रिंट-लाइन $((यादृच्छिक रूप से%$( बिल्ली ${अस्थायी} |नियंत्रण रेखा)+1 ));
आर एम ${अस्थायी}
}

उदाहरण उपयोग (1)

स्व-परीक्षा प्रश्न 100 |_

आउटपुट (1)

35

उदाहरण उपयोग (2)

कर्ल https://linuxhint.com/बैश_कट_कमांड/ --चुप |स्ट्रिप-टैग|कुछ-पंक्ति

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

फ़ाइल में लाइनों को प्रिंट करने के लिए sed का उपयोग करना

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

आदेश

प्रिंट लाइन()
{
एसईडी -एन '$ {1}पी'-
}

अब देखते हैं कि जब हम शब्दों पर प्रिंट-लाइन का उपयोग करते हैं तो क्या होता है।

आदेश

शब्दों|प्रिंट लाइनपचास

उत्पादन

पचास

ठीक। अच्छा लग रहा है लेकिन आइए कुछ ऐसा करने की कोशिश करें जो थोड़ा कम तुच्छ लगे।

आदेश

घोषित -एक्सएफशब्दों
घोषित -एक्सएफप्रिंट लाइन
स्व-परीक्षा प्रश्न 1 10$(शब्दों| स्वागत -NS ) | xargs-मैंदे घुमा के -सी शब्द | प्रिंट-लाइन {}'

उत्पादन

1
ग्यारह
इक्कीस
31
41
51
६१
७१
८१
९१

ठीक। अब यह और अधिक पसंद है! आप देखते हैं कि किसी फ़ाइल में किसी भी लाइन को प्रिंट करने के लिए बैश स्क्रिप्ट में sed का उपयोग कैसे किया जा सकता है।

समकक्ष आदेशों के बिना सेड उदाहरण

एक कमांड-लाइन वातावरण में, कभी-कभी कम से कम प्रतिरोध देने वाले समाधान का मार्ग सेड तरीका होता है; अन्यथा, आप पहली बार में आवश्यकता से अधिक काम कर रहे हैं। कुछ आदेश नीचे दिखाए जा सकते हैं।

शेल स्क्रिप्ट में सभी पंक्तियों को कमांड करें

एसईडी -और 'एस/^/#/'-
पहली पंक्ति हटाएं
एसईडी -और '1डी'-
हटाएंअंतिमरेखा
एसईडी -और '$ घ'-
पैटर्न से मेल खाने वाली लाइनों से पहले एक लाइन डालें
एसईडी '/0$/मैं ---'-
पैटर्न से मेल खाने वाली लाइनों के बाद एक लाइन डालें
एसईडी '/ 0 $ /---'-
html टैग हटा दें
एसईडी -और 'एस /†*.// जी'-
ईरेग अपग्रेड करेंमेंचलाने के लिए पुराना PHP कोडमेंphp7 या बाद में
एसईडी 's/ereg(([^,]*).([^)]*)./strpos(2,1)/g'
जाँचअगर एसईडीएक निश्चित संस्करण से पहले है
एसईडी -और 'वी 4.5'-

उदाहरण sed संस्करण बैश में ब्रांचिंग

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

आदेश

परीक्षण-sed-संस्करण-पर-अधिकतम() {
फेंक दिया -एन | एसईडी 'वी$ {1}'-2> /देव/शून्य
}
कोशिश-संस्करण()
{
फेंक दिया -एन 'संस्करण$ {1}. ठीक। यह करो';
परीक्षण-sed-संस्करण-पर-अधिकतम$ {1} && {
फेंक दिया -एन 'पुराना';
सच
} || {
फेंक दिया -एन 'नया'
};
फेंक दिया ' रास्ता।'
}
मुख्य()
{
स्थानीयवी;
के लियेवीमें 4.{4,5};
करना
कोशिश-संस्करण$ {वी};
किया हुआ
}
मुख्य

उत्पादन

संस्करण4.4. ठीक। इसे पुराने तरीके से करें।
संस्करण4.5. ठीक। इसे नए तरीके से करें।

ध्यान दें कि इन वर्णों को टाइप करते समय मेरी मशीन पर चल रहे sed का संस्करण 4.4 है, जो ऊपर दिए गए आउटपुट की व्याख्या करेगा। साथ ही, उसी समय, gnu sed का नवीनतम संस्करण 4.7 था, जो मेरे पास मौजूद से लगभग 3 वर्ष पुराना है। मेरा सेड पुराना है! वास्तव में, सेड 4.0.6 में, वर्जन कमांड में एक पैरामीटर जोड़ा गया था, इसलिए यह रणनीति किसी भी कम से कम v4.0.6 के लिए काम करती है, जो कि 2003 की शुरुआत में जारी किए गए संस्करण को देखते हुए उदार है। आप अच्छे हैं।

मैंने कुछ अतिरिक्त खुदाई की, वास्तव में समाचार नवीनतम स्रोत कोड से पढ़ रहा था। संस्करण 4.6 में एक नई सुविधा है, -डीबग जो स्क्रिप्ट को डंप करता है और आउटपुट लाइनों को एनोटेट करता है। यह आपको बैश में कार्यों द्वारा उत्पन्न sed लिपियों का विहित रूप में अनुवाद करने की अनुमति देगा। ठंडा! बस यह मत भूलो कि आपको बैश में sed संस्करण ब्रांचिंग की आवश्यकता है। यहीं से यह sed उदाहरण चलन में आता है।

उदाहरण बैश फ़ंक्शन HTML टैग्स को स्ट्रिप करने के लिए sed का उपयोग करता है

ऊपर के उदाहरणों में HTML टैग्स को स्ट्रिप आउट करने के लिए एक लाइन है। आइए इसे एक बैश फ़ंक्शन में फेंक दें और इसका उपयोग मेरे द्वारा लिखे गए पिछले लेख से सभी HTML टैग्स को हटाने के लिए करें।

आदेश

स्ट्रिप-टैग()
{
एसईडी -और 'एस /†*.// जी'-
}
कर्ल https://linuxhint.com/बैश_कट_कमांड/ --चुप |स्ट्रिप-टैग

मैं यह नहीं कह सकता कि यह सही है लेकिन कम से कम यह टर्मिनल में पठनीय है।

वर्कफ़्लोज़ के साथ सेड उदाहरण: उदाहरण वर्कफ़्लो: फाइंड, ग्रेप और सेड का उपयोग करके सभी को सुरक्षित रूप से बदलें

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

कार्यप्रवाह

  1. पाना
  2. पकड़
  3. एसईडी
पाना

यहां आप उन फाइलों का चयन करेंगे जिन्हें प्रतिस्थापन के अधीन किया जाना है। मैं इन पंक्तियों के साथ एक कमांड का उपयोग करने का सुझाव देता हूं:

पाना -प्रकारएफ-नाम | पकड़ -वी-और| xargs-मैं ...

उदाहरण के लिए, आप निम्न प्रकार से git रिपॉजिटरी निर्देशिकाओं को छोड़कर PHP फ़ाइलों को बदलने के लिए फ़ाइलों को सीमित करना चाह सकते हैं।

पाना -प्रकारएफ-नाम*.php| पकड़ -वी -और '।जाओ' | xargs -मैं...

बैश में xargs कमांड पर और पढ़ें।

पकड़

इसके बाद, हम निम्न प्रकार से चुनी गई फाइलों में some_pattern का प्रयास करने और मिलान करने जा रहे हैं। ध्यान दें कि चूंकि हम grep के लिए -o विकल्प का उपयोग कर रहे हैं, आउटपुट केवल मिलान वाली स्ट्रिंग दिखाएगा यदि कोई हो।

पाना -प्रकारएफ-नाम*.php| पकड़ -वी -और '।जाओ' |
xargs -मैं पकड़ -औरकुछ_पैटर्न-या

उपरोक्त आदेश को some_pattern से मेल खाने वाली स्ट्रिंग की एक सूची वापस करनी चाहिए।

एसईडी

अंत में, हम some_pattern से मेल खाने वाले सभी स्ट्रिंग को बदलना चाहते हैं। ऐसा करने के लिए हमें निम्नानुसार grep को sed में बदलना होगा।

पाना -प्रकारएफ-नाम*.php| पकड़ -वी -और '।जाओ' |
xargs -मैं एसईडी -मैं -औरएस/कुछ_पैटर्न/प्रतिस्थापन/जी

grep कमांड sed -i बन जाता है और -o विकल्प हटा दिया जाता है। आखिर तुमने इसे हासिल कर ही लिया है।

अब आप अपनी किस्मत को परखने के बजाय पहले से जांच सकते हैं कि sed में कौन से तार बदले जा रहे हैं।

उदाहरणों में प्रयुक्त विकल्पों पर एंडनोट्स

यहां संक्षेप में चर्चा किए गए sed उदाहरणों में उपयोग किए गए विकल्पों की सूची दी गई है।

विकल्प विवरण
-मैं जगह में संपादित करें। यदि इनपुट एक फ़ाइल है (पाइप नहीं किया गया है) तो अभिव्यक्तियों का परिणाम फ़ाइल की सामग्री को अधिलेखित कर देगा।

सेड एक स्वीकार करता है

जैसे) सेड-एन…

-और -ई अभिव्यक्ति के लिए खड़ा है। इसका पैरामीटर सेड भाषा में एक अभिव्यक्ति है।

सेड कई स्वीकार करता है

उदाहरण के लिए) sed -e'expr1' -e'expr2'

-एन अभिव्यक्ति से प्रभावित नहीं हुई रेखा को छुपाता है। यानी अगर एक्सप्रेशन सेड लैंग्वेज में प्रिंट स्टेटमेंट है, तो प्रिंट स्टेटमेंट में शामिल नहीं होने वाली लाइनें आउटपुट में शामिल नहीं होंगी।

जैसे) सेड-एन…

उपलब्ध sed विकल्पों के बारे में अधिक जानकारी के लिए, देखें sed –help

उदाहरणों में उपयोग किए जाने वाले समकक्ष कमांड पर नोट्स समाप्त करें

निम्नलिखित कमांड-लाइन उपयोगिताओं को sed उदाहरणों में समकक्ष कमांड के साथ शामिल किया गया है।

  • तरह
  • सिर
  • पूंछ
  • पकड़
  • बिल्ली
  • एन एस
  • टी

अनुगामी पर एंडनोट - उदाहरण में समकक्ष कमांड

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

बिल्लीकुछ-फ़ाइल| तरह -आर-| सिर -1

हालांकि, जब बाएं हाथ पर पाइप मौजूद है, तो हम संकेत को इस प्रकार छोड़ सकते हैं।

बिल्लीकुछ-फ़ाइल| तरह -आर | सिर -1

उदाहरणों में आदेशों के बाद - चरित्र के साथ यही चल रहा था।

सेटअप के लिए कार्यों पर एंडनोट्स

यदि आप देख रहे हैं, तो उपरोक्त उदाहरणों के लिए सेटअप के कार्य यहां दिए गए हैं। डिक्लेयर -f का उपयोग करके प्राप्त आउटपुट। अधिक उपयोगों के लिए बैश में डिक्लेयर कमांड पर और पढ़ें।

आदेश

शब्दों()
{
स्व-परीक्षा प्रश्न 100
}
छड़()
{
फेंक दिया ---
}
पुराना-php()
{
फेंक दिया 'ईरेग ($ UA,' बॉटीबोट ')'
}

जमीनी स्तर

मुझे बैश सेड उदाहरण लिखने में मज़ा आया और रास्ते में कुछ अतिरिक्त तरकीबें भी उठाईं। पाठ फ़ाइलों में हेरफेर करने के लिए Sed एक शक्तिशाली कमांड-लाइन उपयोगिता और अभिव्यंजक भाषा है। यदि आप sed के बारे में सीखना पसंद करते हैं, तो चिंता न करें, अभी भी बहुत कुछ छुआ जाना बाकी है। सेड चालू।