यह केवल बनाया का उपयोग कर एक कदम करने के लिए एक तरीका नहीं है:
var="http://whatever/score/"
temp_var="${var#http://}"
echo "${temp_var%/score/}"
वैकल्पिक रूप से, आप के साथ (उदाहरण के लिए) sed रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं -शैश कार्यक्षमता (sed
जैसे कोई बाहरी प्रोग्राम नहीं चल रहा है) - BASH_REMATCH
:
url=http://whatever/score/
re='https?://(.*)/score/'
[[ $url =~ $re ]] && printf '%s\n' "${BASH_REMATCH[1]}"
यह =~
परीक्षण के दाईं ओर नियमित अभिव्यक्ति के खिलाफ मेल खाता है, और समूहों को BASH_REMATCH
सरणी में डालता है।
कहा, यह दो पीई भाव और एक अस्थायी चर का उपयोग करने के लिए और अधिक परंपरागत है: ऊपर के उदाहरण में
shopt -s extglob
url=http://whatever/score/
val=${url#http?(s)://}; val=${val%/score/}
printf '%s\n' "$val"
..., extglob
विकल्प खोल मान्यता प्राप्त करने के लिए "अनुमति देने के लिए प्रयोग किया जाता है extglobs "- ग्लोब वाक्यविन्यास के लिए बैश के एक्सटेंशन (नियमित अभिव्यक्तियों के लिए बिजली में समान ग्लोब-स्टाइल पैटर्न बनाना), जिनमें से ?(foo)
का अर्थ है कि foo
वैकल्पिक है।
वैसे, मैं printf
इन उदाहरणों में echo
उपयोग कर रहा हूँ के बजाय क्योंकि echo
के व्यवहार के कई कार्यान्वयन से परिभाषित कर रहे हैं - उदाहरण के लिए, इस मामले में जहां चर की सामग्री को -e
या -n
हैं पर विचार करें।
स्रोत
2013-06-16 01:41:29
पैटर्न किस तरह का? क्या तुम्हारे लिए थोडा और अधिक विशिष्ट होना संभव है? –
हां, इस मामले में: http: // शुरुआत में, और/स्कोर/अंत में। $ Line को एक फ़ाइल.txt – bobylapointe
से पढ़ा जाता है जो आप खोज रहे हैं पैरामीटर विस्तार है, विशेष रूप से आपके मामले में '$ {पैरामीटर # शब्द}' और '$ {पैरामीटर% शब्द}' के अंत के पास बैश मैनुअल] (http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html) – doubleDown