Bash शेल में, जब आप एक डॉलर साइन के बाद एक वेरिएबल नाम का उपयोग करते हैं, तो शेल वेरिएबल को उसके मान के साथ विस्तारित करता है। शेल की इस सुविधा को पैरामीटर विस्तार कहा जाता है।
लेकिन पैरामीटर विस्तार के कई अन्य रूप हैं जो आपको एक पैरामीटर का विस्तार करने और विस्तार प्रक्रिया में मान को संशोधित करने या अन्य मानों को प्रतिस्थापित करने की अनुमति देते हैं। इस लेख में, आइए समीक्षा करें कि स्ट्रिंग मैनिपुलेशन संचालन के लिए पैरामीटर विस्तार अवधारणा का उपयोग कैसे करें।
यह लेख चल रहे bash ट्यूटोरियल सीरीज़ का हिस्सा है। bash { } विस्तार पर हमारे पहले के लेख देखें।
1. Bash शेल स्क्रिप्ट के अंदर स्ट्रिंग लंबाई पहचानें
${#string}
उपरोक्त प्रारूप का उपयोग दिए गए bash वेरिएबल की लंबाई प्राप्त करने के लिए किया जाता है।
$ cat len.sh #! /bin/bash var="Welcome to the geekstuff" echo ${#var} $ ./len.sh 24
Bash वेरिएबल्स के बारे में अधिक समझने के लिए, 6 व्यावहारिक Bash ग्लोबल और लोकल वेरिएबल उदाहरण पढ़ें।
2. Bash शेल स्क्रिप्ट के अंदर एक वेरिएबल से सबस्ट्रिंग निकालें
Bash एक स्ट्रिंग से सबस्ट्रिंग निकालने का एक तरीका प्रदान करता है। निम्नलिखित उदाहरण बताता है कि किसी विशेष स्थिति से शुरू होकर n वर्णों को कैसे पार्स किया जाए।
${string:position}
$string पर $position से सबस्ट्रिंग निकालें
${string:position:length}
$string से $position से शुरू होकर $length वर्णों का सबस्ट्रिंग निकालें। नीचे दिए गए उदाहरण में, पहला echo स्टेटमेंट 15वीं स्थिति से शुरू होने वाला सबस्ट्रिंग लौटाता है। दूसरा echo स्टेटमेंट 15वीं स्थिति से शुरू होने वाले 4 वर्ण लौटाता है। लंबाई शून्य से बड़ी या बराबर संख्या होनी चाहिए।
$ cat substr.sh #! /bin/bash var="Welcome to the geekstuff" echo ${var:15} echo ${var:15:4} $ ./substr.sh geekstuff geek
इसके अलावा, $*, $@, $#, $$, $!, $?, $-, $_ bash विशेष पैरामीटर्स को समझने के लिए हमारे पहले के लेख देखें।
3. सबसे छोटा सबस्ट्रिंग मैच
निम्नलिखित सिंटैक्स $string के सामने से $substring के सबसे छोटे मैच को हटाता है
${string#substring}
निम्नलिखित सिंटैक्स $string के पीछे से $substring के सबसे छोटे मैच को हटाता है
${string%substring}
निम्नलिखित नमूना शेल स्क्रिप्ट उपरोक्त दो सबसे छोटे सबस्ट्रिंग मैच अवधारणाओं को समझाती है।
$ cat shortest.sh #! /bin/bash filename="bash.string.txt" echo ${filename#*.} echo ${filename%.*} $ ./shortest.sh सामने से सबसे छोटे मैच को हटाने के बाद: string.txt पीछे से सबसे छोटे मैच को हटाने के बाद: bash.string
पहले echo स्टेटमेंट में सबस्ट्रिंग '*.' वर्णों और एक डॉट से मेल खाता है, और # स्ट्रिंग के सामने से हटाता है, इसलिए यह वेरिएबल filename से सबस्ट्रिंग "bash." को हटा देता है। दूसरे echo स्टेटमेंट में सबस्ट्रिंग '.*' डॉट से शुरू होने वाले सबस्ट्रिंग से मेल खाता है, और % स्ट्रिंग के पीछे से हटाता है, इसलिए यह सबस्ट्रिंग '.txt' को हटा देता है।
4. सबसे लंबा सबस्ट्रिंग मैच
निम्नलिखित सिंटैक्स $string के सामने से $substring के सबसे लंबे मैच को हटाता है
${string##substring}
निम्नलिखित सिंटैक्स $string के पीछे से $substring के सबसे लंबे मैच को हटाता है
${string%%substring}
निम्नलिखित नमूना शेल स्क्रिप्ट उपरोक्त दो सबसे लंबे सबस्ट्रिंग मैच अवधारणाओं को समझाती है।
$ cat longest.sh #! /bin/bash filename="bash.string.txt" echo "सामने से सबसे लंबे मैच को हटाने के बाद:" ${filename##*.} echo "पीछे से सबसे लंबे मैच को हटाने के बाद:" ${filename%%.*} $ ./longest.sh सामने से सबसे लंबे मैच को हटाने के बाद: txt पीछे से सबसे लंबे मैच को हटाने के बाद: bash
उपरोक्त उदाहरण में, ##*. '*.' के लिए सबसे लंबा मैच हटाता है जो "bash.string." से मेल खाता है, इसलिए इसे हटाने के बाद, यह शेष txt प्रिंट करता है। और %%.* पीछे से .* के लिए सबसे लंबा मैच हटाता है जो ".string.txt" से मेल खाता है, इसे हटाने के बाद यह "bash" लौटाता है।
5. Bash शेल स्क्रिप्ट के अंदर स्ट्रिंग मान खोजें और प्रतिस्थापित करें
केवल पहला मैच प्रतिस्थापित करें
${string/pattern/replacement}
यह वेरिएबल $string में पैटर्न से मेल खाता है, और पैटर्न के केवल पहले मैच को प्रतिस्थापन से बदल देता है।
$ cat firstmatch.sh #! /bin/bash filename="bash.string.txt" echo "प्रतिस्थापन के बाद:" ${filename/str*./operations.} $ ./firstmatch.sh प्रतिस्थापन के बाद: bash.operations.txt
सभी मैचों को प्रतिस्थापित करें
${string//pattern/replacement}
यह पैटर्न के सभी मैचों को प्रतिस्थापन से बदल देता है।
$ cat allmatch.sh #! /bin/bash filename="Path of the bash is /bin/bash" echo "प्रतिस्थापन के बाद:" ${filename//bash/sh} $ ./allmatch.sh प्रतिस्थापन के बाद: Path of the sh is /bin/sh
खोज और प्रतिस्थापन के बारे में बात करते हुए, हमारे पहले के लेख देखें - sed सब्स्टीट्यूट उदाहरण और Vim खोज और प्रतिस्थापन।
शुरुआत और अंत को प्रतिस्थापित करें
${string/#pattern/replacement}
निम्नलिखित सिंटैक्स प्रतिस्थापन स्ट्रिंग से प्रतिस्थापित करता है, केवल जब पैटर्न $string की शुरुआत से मेल खाता है।
${string/%pattern/replacement}
निम्नलिखित सिंटैक्स प्रतिस्थापन स्ट्रिंग से प्रतिस्थापित करता है, केवल जब पैटर्न दिए गए $string के अंत से मेल खाता है।
$ cat posmatch.sh #! /bin/bash filename="/root/admin/monitoring/process.sh" echo "शुरुआत में प्रतिस्थापित:" ${filename/#\/root/\/tmp} echo "अंत में प्रतिस्थापित": ${filename/%.*/.ksh} $ ./posmatch.sh शुरुआत में प्रतिस्थापित: /tmp/admin/monitoring/process.sh अंत में प्रतिस्थापित: /root/admin/monitoring/process.ksh
अनुशंसित पठन
Bash 101 Hacks, रमेश नटराजन द्वारा. मैं अपना अधिकांश समय Linux वातावरण में बिताता हूं। इसलिए, स्वाभाविक रूप से मैं Bash कमांड लाइन और शेल स्क्रिप्टिंग का बहुत बड़ा प्रशंसक हूं। 15 साल पहले, जब मैं *nix के विभिन्न फ्लेवर्स पर काम कर रहा था, मैं C शेल और Korn शेल पर बहुत सारा कोड लिखता था। बाद के वर्षों में, जब मैंने Linux पर सिस्टम एडमिनिस्ट्रेटर के रूप में काम करना शुरू किया, तो मैंने Bash शेल स्क्रिप्टिंग का उपयोग करके हर संभव कार्य को स्वचालित कर दिया। अपने Bash अनुभव के आधार पर, मैंने Bash 101 Hacks ईबुक लिखी है जिसमें Bash कमांड लाइन और शेल स्क्रिप्टिंग दोनों पर 101 व्यावहारिक उदाहरण हैं। यदि आप Bash में मास्टर बनने के बारे में सोच रहे हैं, तो अपना उपकार करें और इस पुस्तक को पढ़ें, जो आपके Bash कमांड लाइन और शेल स्क्रिप्टिंग पर नियंत्रण पाने में मदद करेगी।