joebloggsकिसी अतिरिक्त प्रक्रिया के बिना पैरामीटर विस्तार का उपयोग करके बैश में इस स्ट्रिंग से निकालने के लिए ...
MYVAR="/var/cpanel/users/joebloggs:DNS9=domain.com"
NAME=${MYVAR%:*} # retain the part before the colon
NAME=${NAME##*/} # retain the part after the last slash
echo $NAME
joebloggsरास्ते में एक विशेष गहराई पर होने पर निर्भर नहीं करता है।
सारांश
संदर्भ के लिए कुछ पैरामीटर विस्तार मोड का अवलोकन ...
${MYVAR#pattern} # delete shortest match of pattern from the beginning
${MYVAR##pattern} # delete longest match of pattern from the beginning
${MYVAR%pattern} # delete shortest match of pattern from the end
${MYVAR%%pattern} # delete longest match of pattern from the end
तो #शुरू से मैच का मतलब है (एक टिप्पणी लाइन के बारे में सोचो) और %अंत से मतलब है। एक उदाहरण का अर्थ है सबसे छोटा और दो उदाहरणों का अर्थ है सबसे लंबा।
आप संख्याओं का उपयोग करके स्थिति के आधार पर सबस्ट्रिंग प्राप्त कर सकते हैं:
${MYVAR:3} # Remove the first three chars (leaving 4..end)
${MYVAR::3} # Return the first three characters
${MYVAR:3:5} # The next five characters after removing the first 3 (chars 4-9)
आप विशेष स्ट्रिंग्स या पैटर्न का उपयोग करके भी बदल सकते हैं:
${MYVAR/search/replace}
patternफ़ाइल-नाम मिलान के रूप में एक ही प्रारूप में है, इसलिए *(कोई भी वर्ण) आम है, अक्सर की तरह एक विशेष प्रतीक के बाद /या.
उदाहरण:
जैसे एक चर दिया
MYVAR="users/joebloggs/domain.com"
फ़ाइल नाम छोड़ने का मार्ग निकालें (स्लैश तक सभी वर्ण):
echo ${MYVAR##*/}
domain.com
पथ को छोड़कर, फ़ाइल का नाम निकालें (अंतिम के बाद सबसे छोटा मिलान हटाएं /):
echo ${MYVAR%/*}
users/joebloggs
बस फ़ाइल एक्सटेंशन प्राप्त करें (अंतिम अवधि से पहले सभी को हटा दें):
echo ${MYVAR##*.}
com
नोट: दो ऑपरेशन करने के लिए, आप उन्हें संयोजित नहीं कर सकते, लेकिन एक मध्यवर्ती चर को असाइन करना होगा। तो पथ या विस्तार के बिना फ़ाइल नाम प्राप्त करने के लिए:
NAME=${MYVAR##*/} # remove part before last slash
echo ${NAME%.*} # from the new var remove the part after the last period
domain