बैश शेल में, जब आप एक डॉलर के चिह्न का उपयोग करते हैं जिसके बाद एक चर नाम होता है, तो शेल अपने मूल्य के साथ चर का विस्तार करता है। शेल की इस विशेषता को पैरामीटर विस्तार कहा जाता है।
लेकिन पैरामीटर विस्तार के कई अन्य रूप हैं जो आपको एक पैरामीटर का विस्तार करने और मूल्य को संशोधित करने या विस्तार प्रक्रिया में अन्य मूल्यों को प्रतिस्थापित करने की अनुमति देते हैं। इस लेख में, आइए देखें कि स्ट्रिंग हेरफेर संचालन के लिए पैरामीटर विस्तार अवधारणा का उपयोग कैसे करें।
यह लेख चल रहे बैश ट्यूटोरियल श्रृंखला का हिस्सा है। बैश { } विस्तार पर हमारा पिछला लेख देखें।
${#string} दिए गए बैश चर की लंबाई प्राप्त करने के लिए उपरोक्त प्रारूप का उपयोग किया जाता है।
$ cat len.sh
#! /bin/bash
var="Welcome to the geekstuff"
echo ${#var}
$ ./len.sh
24
बैश वेरिएबल्स के बारे में अधिक समझने के लिए, 6 प्रैक्टिकल बैश ग्लोबल और लोकल वेरिएबल उदाहरण पढ़ें।
<एच3>2. बैश शैल स्क्रिप्ट के अंदर एक चर से एक सबस्ट्रिंग निकालेंबैश एक स्ट्रिंग से सबस्ट्रिंग निकालने का एक तरीका प्रदान करता है। निम्न उदाहरण बताता है कि किसी विशेष स्थिति से शुरू होने वाले n वर्णों को कैसे पार्स किया जाए।
${string:position} $string से $position पर सबस्ट्रिंग निकालें
<केंद्र> केंद्र>${string:position:length} $ स्थिति से शुरू होने वाले $ string से सबस्ट्रिंग वर्णों की $ लंबाई निकालें। नीचे दिए गए उदाहरण में, पहला इको स्टेटमेंट 15 वें स्थान से शुरू होने वाले सबस्ट्रिंग को लौटाता है। दूसरा इको स्टेटमेंट 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>3. सबसे छोटा सबस्ट्रिंग मैचनिम्नलिखित सिंटैक्स $string के सामने से $substring के सबसे छोटे मिलान को हटा देता है
${string#substring} निम्नलिखित सिंटैक्स $string के पीछे से $substring के सबसे छोटे मिलान को हटा देता है
${string%substring} निम्नलिखित नमूना शेल स्क्रिप्ट उपरोक्त दो सबसे छोटी सबस्ट्रिंग मिलान अवधारणाओं की व्याख्या करती है।
$ cat shortest.sh
#! /bin/bash
filename="bash.string.txt"
echo ${filename#*.}
echo ${filename%.*}
$ ./shortest.sh
After deletion of shortest match from front: string.txt
After deletion of shortest match from back: bash.string
पहले इको स्टेटमेंट में सबस्ट्रिंग '*।' वर्णों और एक बिंदु से मेल खाता है, और स्ट्रिंग के सामने से # स्ट्रिप्स से मेल खाता है, इसलिए यह सबस्ट्रिंग "बैश" को स्ट्रिप्स करता है। फ़ाइल नाम नामक चर से। दूसरे इको स्टेटमेंट में '.*' सबस्ट्रिंग डॉट से शुरू होता है, और स्ट्रिंग के पीछे से % स्ट्रिप्स से मेल खाता है, इसलिए यह सबस्ट्रिंग '.txt' को हटा देता है
<एच3>4. सबसे लंबा सबस्ट्रिंग मैचनिम्नलिखित सिंटैक्स $string के सामने से $substring के सबसे लंबे मिलान को हटा देता है
${string##substring} निम्नलिखित सिंटैक्स $string के पीछे से $substring के सबसे लंबे मिलान को हटा देता है
${string%%substring} निम्नलिखित नमूना शेल स्क्रिप्ट उपरोक्त दो सबसे लंबी सबस्ट्रिंग मिलान अवधारणाओं की व्याख्या करती है।
$ cat longest.sh
#! /bin/bash
filename="bash.string.txt"
echo "After deletion of longest match from front:" ${filename##*.}
echo "After deletion of longest match from back:" ${filename%%.*}
$ ./longest.sh
After deletion of longest match from front: txt
After deletion of longest match from back: bash
उपरोक्त उदाहरण में, ##*. '*' के लिए सबसे लंबा मैच स्ट्रिप्स करता है जो "bash.string" से मेल खाता है। इसलिए इसे स्ट्रिप करने के बाद यह बचे हुए txt को प्रिंट कर देता है। और %%.* .* के लिए सबसे लंबे मैच को पीछे से स्ट्रिप करता है जो ".string.txt" से मेल खाता है, स्ट्रिप करने के बाद यह "बैश" लौटाता है।
5. बैश शैल स्क्रिप्ट के अंदर स्ट्रिंग मान ढूंढें और बदलें
केवल पहला मैच बदलें
${string/pattern/replacement} यह चर $string में पैटर्न से मेल खाता है, और प्रतिस्थापन के साथ पैटर्न के केवल पहले मैच को प्रतिस्थापित करता है।
$ cat firstmatch.sh
#! /bin/bash
filename="bash.string.txt"
echo "After Replacement:" ${filename/str*./operations.}
$ ./firstmatch.sh
After Replacement: bash.operations.txt
सभी मैच बदलें
${string//pattern/replacement} यह पैटर्न के सभी मिलानों को प्रतिस्थापन के साथ बदल देता है।
$ cat allmatch.sh
#! /bin/bash
filename="Path of the bash is /bin/bash"
echo "After Replacement:" ${filename//bash/sh}
$ ./allmatch.sh
After Replacement: Path of the sh is /bin/sh
खोजने और बदलने के बारे में, हमारे पहले के लेख देखें - sed स्थानापन्न उदाहरण और विम ढूंढें और बदलें।
आरंभ और अंत बदलें
${string/#pattern/replacement} निम्नलिखित सिंटैक्स प्रतिस्थापन स्ट्रिंग के साथ प्रतिस्थापित करता है, केवल जब पैटर्न $string की शुरुआत से मेल खाता है।
${string/%pattern/replacement} निम्नलिखित सिंटैक्स प्रतिस्थापन स्ट्रिंग के साथ प्रतिस्थापित करता है, केवल जब पैटर्न दिए गए $string के अंत में मेल खाता है।
$ cat posmatch.sh
#! /bin/bash
filename="/root/admin/monitoring/process.sh"
echo "Replaced at the beginning:" ${filename/#\/root/\/tmp}
echo "Replaced at the end": ${filename/%.*/.ksh}
$ ./posmatch.sh
Replaced at the beginning: /tmp/admin/monitoring/process.sh
Replaced at the end: /root/admin/monitoring/process.ksh
अनुशंसित पठन
बैश 101 हैक्स, रमेश नटराजन द्वारा . मैं अपना अधिकांश समय लिनक्स पर्यावरण पर बिताता हूं। इसलिए, स्वाभाविक रूप से मैं बैश कमांड लाइन और शेल स्क्रिप्टिंग का बहुत बड़ा प्रशंसक हूं। 15 साल पहले, जब मैं * निक्स के विभिन्न स्वादों पर काम कर रहा था, मैं सी शेल और कॉर्न शेल पर बहुत सारे कोड लिखता था। बाद के वर्षों में, जब मैंने लिनक्स पर सिस्टम एडमिनिस्ट्रेटर के रूप में काम करना शुरू किया, तो मैंने बैश शेल स्क्रिप्टिंग का उपयोग करके हर संभव कार्य को स्वचालित रूप से स्वचालित कर दिया। अपने बैश अनुभव के आधार पर, मैंने बैश 101 हैक्स ईबुक लिखी है जिसमें बैश कमांड लाइन और शेल स्क्रिप्टिंग दोनों पर 101 व्यावहारिक उदाहरण हैं। यदि आप बैश में महारत हासिल करने के बारे में सोच रहे हैं, तो अपने आप पर एक एहसान करें और इस पुस्तक को पढ़ें, जो आपकी बैश कमांड लाइन और शेल स्क्रिप्टिंग को नियंत्रित करने में आपकी मदद करेगी।