<पी>
यह लेख चल रही यूनिक्स सेड टिप्स और ट्रिक्स श्रृंखला का हिस्सा है। <पी> हमारे पिछले 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