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

उन्नत Sed सब्स्टीट्यूशन: विशेषज्ञ तकनीकें और व्यावहारिक उदाहरण

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

हमारे पिछले sed लेखों में हमने सीखा - sed प्रिंटिंग, sed डिलीशन, sed सब्स्टीट्यूट, sed फ़ाइल राइट, और sed मल्टीपल कमांड।

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

I. Sed सब्स्टीट्यूशन डिलीमीटर

जैसा कि हमने अपनी पिछली पोस्ट में चर्चा की थी, हम 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 / डिलीमीटर: /opt/omni/lbin को /opt/tools/bin में प्रतिस्थापित करें

जब आपको पथ नाम संबंधी प्रतिस्थापन में '/' का उपयोग करना चाहिए, तो आपको प्रतिस्थापन डेटा में '/' को एस्केप करना होगा जैसा कि नीचे दिखाया गया है। इस sed उदाहरण में, डिलीमीटर '/' को 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

II. 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 में ग्रुपिंग और बैक-रेफरेंस

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

बैक-रेफरेंस ग्रुपिंग द्वारा चयनित नियमित अभिव्यक्ति के एक भाग का पुन: उपयोग है। 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: प्रत्येक शब्द के पहले वर्ण को पैरेंथेसाइज़ करें

यह sed उदाहरण प्रत्येक शब्द के पहले वर्ण को पैरेंथेसिस में प्रिंट करता है।

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

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

आइए numbers नामक फ़ाइल बनाएं जिसमें संख्याओं की सूची हो। नीचे दिया गया 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. HTML DOM Input Submit ऑब्जेक्ट HTML DOM Input Submit ऑब्जेक्ट

    HTML DOM Input Submit ऑब्जेक्ट type submit वाले <input> एलिमेंट से जुड़ा होता है। हम createElement() मेथड और getElementById() मेथड का उपयोग करके क्रमशः type submit वाले इनपुट एलिमेंट को बना और एक्सेस कर सकते हैं। प्रॉपर्टीज Input submit ऑब्जेक्ट के लिए निम्नलिखित प्रॉपर्टीज हैं: प्रॉपर्टीवि

  1. JavaScript Array.includes(): एरे में तत्व खोजें JavaScript Array.includes(): एरे में तत्व खोजें

    Array.includes() मेथड जांचता है कि कोई एरे दिए गए तत्व को शामिल करता है या नहीं, और true या false लौटाता है। यह indexOf() !== -1 से अधिक पठनीय है। उदाहरण { fillEle.innerHTML = शेर एरे में मौजूद है: + arr.includes(शेर); }); </script> </body> </html> आउटपुट क्लिक क

  1. C भाषा में दिए गए इंडेक्स पर लिंक्ड लिस्ट के नोड्स प्रिंट करना C भाषा में दिए गए इंडेक्स पर लिंक्ड लिस्ट के नोड्स प्रिंट करना

    हमें दिए गए इंडेक्स पर लिंक्ड लिस्ट के नोड्स का डेटा प्रिंट करना है। ऐरे के विपरीत लिंक्ड लिस्ट में आमतौर पर इंडेक्स नहीं होते इसलिए हमें पूरी लिंक्ड लिस्ट को ट्रैवर्स करना होगा और जब हम किसी विशेष इंडेक्स पर पहुंचें तो डेटा प्रिंट करना होगा। मान लें, लिस्ट में नोड्स 29, 34, 43, 56 और 88 हैं और इं