Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

उन्नत सेड प्रतिस्थापन:विशेषज्ञ तकनीक और व्यावहारिक उदाहरण

<पी> उन्नत सेड प्रतिस्थापन:विशेषज्ञ तकनीक और व्यावहारिक उदाहरण यह लेख चल रही यूनिक्स सेड टिप्स और ट्रिक्स श्रृंखला का हिस्सा है।

<पी> हमारे पिछले sed लेखों में हमने सीखा - sed प्रिंटिंग, sed विलोपन, sed स्थानापन्न, sed फ़ाइल लिखना, और sed एकाधिक कमांड।

<पी> इस आलेख में, आइए हम कई व्यावहारिक उदाहरणों के साथ sed में "s" स्थानापन्न कमांड के साथ कुछ दिलचस्प समाधानों की समीक्षा करें।

मैं. सेड प्रतिस्थापन डिलीमीटर

<पी> जैसा कि हमने अपनी पिछली पोस्ट में चर्चा की थी, हम विभिन्न सीमांकक जैसे @% | का उपयोग कर सकते हैं; :sed स्थानापन्न कमांड में।

<पी> आइए सबसे पहले path.txt फ़ाइल बनाएं जिसका उपयोग नीचे उल्लिखित सभी उदाहरणों में किया जाएगा।

$ cat path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/omni/lbin:/opt/omni/sbin:/root/bin

उदाहरण 1 - sed @ सीमांकक:/opt/omni/lbin को /opt/tools/bin से प्रतिस्थापित करें

<पी> जब आप किसी पथ नाम को प्रतिस्थापित करते हैं जिसमें '/' है, तो आप '/' के बजाय @ को सीमांकक के रूप में उपयोग कर सकते हैं। नीचे दिए गए sed उदाहरण में, इनपुट फ़ाइल की अंतिम पंक्ति में, /opt/omni/lbin को /opt/tools/bin में बदल दिया गया था।

$ sed 's@/opt/omni/lbin@/opt/tools/bin@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/tools/bin:/opt/omni/sbin:/root/bin

उदाहरण 2 - sed/delimiter:/opt/omni/lbin को /opt/tools/bin से प्रतिस्थापित करें

<पी> जब आपको पथ नाम से संबंधित प्रतिस्थापन में '/' का उपयोग करना चाहिए, तो आपको प्रतिस्थापन डेटा में '/' से बचना होगा जैसा कि नीचे दिखाया गया है। इस सेड उदाहरण में, सीमांकक '/' REGEXP और REPLACEMENT भाग में बच गया था।

$ sed 's/\/opt\/omni\/lbin/\/opt\/tools\/bin/g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/tools/bin:/opt/omni/sbin:/root/bin

द्वितीय. Sed '&' मिलान स्ट्रिंग प्राप्त करें

<पी> इनपुट लाइन का सटीक भाग जिस पर रेगुलर एक्सप्रेशन मेल खाता है, उसे &द्वारा दर्शाया जाता है, जिसे बाद में प्रतिस्थापन भाग में उपयोग किया जा सकता है।

उदाहरण 1 - sed और उपयोग:/usr/bin/ को /usr/bin/local में बदलें

$ sed 's@/usr/bin@&/local@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin/local:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin/local:/opt/omni/bin:
/opt/omni/lbin:/opt/omni/sbin:/root/bin
<पी> उपरोक्त उदाहरण में प्रतिस्थापन भाग में '&' को /usr/bin से बदल दिया जाएगा जो कि मिलान पैटर्न है और इसे /local के साथ जोड़ देगा। तो आउटपुट में /usr/bin की सभी घटनाओं को /usr/bin/local से बदल दिया जाएगा

उदाहरण 2 - sed और उपयोग:पूरी पंक्ति से मिलान करें

<पी> &जो भी दिए गए REGEXP से मेल खाता है उसे बदल देता है।

$ sed 's@^.*$@<<<&>>>@g' path.txt
<<</usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin>>>
<<</usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:>>>
<<</opt/omni/lbin:/opt/omni/sbin:/root/bin>>>
<पी> उपरोक्त उदाहरण में regexp में "^.*$" है जो पूरी लाइन से मेल खाता है। प्रतिस्थापन भाग <<<&>>> पंक्ति के आरंभ और अंत में क्रमशः <<<और>>> के साथ पूरी पंक्ति लिखता है।

III. सेड में ग्रुपिंग और बैक-रेफरेंस

<पी> ग्रुपिंग का उपयोग सामान्य नियमित अभिव्यक्ति की तरह सेड में किया जा सकता है। एक समूह को "\(" से खोला जाता है और "\) से बंद किया जाता है। ग्रुपिंग का उपयोग बैक-रेफरेंसिंग के साथ संयोजन में किया जा सकता है।

<पी> बैक-रेफरेंस ग्रुपिंग द्वारा चयनित रेगुलर एक्सप्रेशन के एक भाग का पुन:उपयोग है। Sed में बैक-रेफरेंस का उपयोग रेगुलर एक्सप्रेशन और स्थानापन्न कमांड के प्रतिस्थापन भाग दोनों में किया जा सकता है।

उदाहरण 1:प्रत्येक पंक्ति में केवल पहला पथ प्राप्त करें

$ sed 's/\(\/[^:]*\).*/\1/g' path.txt
/usr/kbos/bin
/usr/local/sbin
/opt/omni/lbin
<पी> उपरोक्त उदाहरण में, \(\/[^:]*\) पहले :आने से पहले उपलब्ध पथ से मेल खाता है। \1 पहले मिलान वाले समूह को प्रतिस्थापित करता है।

उदाहरण 2:मल्टीग्रुपिंग

<पी> फ़ाइल path.txt में फ़ाइल की अंतिम पंक्ति में फ़ील्ड का क्रम बदलें।

$ sed '$s@\([^:]*\):\([^:]*\):\([^:]*\)@\3:\2:\1@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/omni/bin:
/root/bin:/opt/omni/sbin:/opt/omni/lbin
<पी> उपरोक्त कमांड में $ केवल अंतिम पंक्ति के लिए होने वाले प्रतिस्थापन को निर्दिष्ट करता है। आउटपुट से पता चलता है कि अंतिम पंक्ति में पथ मानों का क्रम उलट गया है।

उदाहरण 3:/etc/passwd फ़ाइल में उपयोगकर्ता नामों की सूची प्राप्त करें

<पी> यह sed उदाहरण /etc/passwd फ़ाइल से केवल पहला फ़ील्ड प्रदर्शित करता है।

$sed 's/\([^:]*\).*/\1/' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown

उदाहरण 4:प्रत्येक शब्द के पहले अक्षर को कोष्ठक में रखें

<पी> यह सेड उदाहरण लघुगणक में प्रत्येक शब्द के पहले अक्षर को प्रिंट करता है।

$ echo "Welcome To The Geek Stuff" | sed 's/\(\b[A-Z]\)/\(\1\)/g'
(W)elcome (T)o (T)he (G)eek (S)tuff

उदाहरण 5:सरल संख्या को कमिफाई करें।

<पी> आइए हम नंबर नामक फ़ाइल बनाएं जिसमें संख्याओं की सूची हो। नीचे दिए गए sed कमांड उदाहरण का उपयोग हजारों तक संख्याओं को कम करने के लिए किया जाता है।

$ cat numbers
1234
12121
3434
123
$sed 's/\(^\|[^0-9.]\)\([0-9]\+\)\([0-9]\{3\}\)/\1\2,\3/g' numbers
1,234
12,121
3,434
123

  1. JSON टेक्स्ट को जावास्क्रिप्ट JSON ऑब्जेक्ट में कैसे बदलें? JSON टेक्स्ट को जावास्क्रिप्ट JSON ऑब्जेक्ट में कैसे बदलें?

    JSON पार्स () विधि का उपयोग JSON टेक्स्ट को JavaScript ऑब्जेक्ट में बदलने के लिए किया जाता है। JSON टेक्स्ट को JavaScript JSON ऑब्जेक्ट में बदलने के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta n

  1. सूची में तत्वों का योग खोजने के लिए पायथन कार्यक्रम सूची में तत्वों का योग खोजने के लिए पायथन कार्यक्रम

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

  1. MNIST डेटासेट के लिए भार को बचाने और लोड करने के लिए Tensorflow का उपयोग कैसे किया जा सकता है? MNIST डेटासेट के लिए भार को बचाने और लोड करने के लिए Tensorflow का उपयोग कैसे किया जा सकता है?

    Tensorflow एक मशीन लर्निंग फ्रेमवर्क है जो Google द्वारा प्रदान किया जाता है। यह एक ओपन-सोर्स फ्रेमवर्क है जिसका उपयोग एल्गोरिदम, गहन शिक्षण अनुप्रयोगों और बहुत कुछ को लागू करने के लिए पायथन के साथ संयोजन में किया जाता है। इसका उपयोग अनुसंधान और उत्पादन उद्देश्यों के लिए किया जाता है। इसमें अनुकूलन