बैश का उपयोग करके URL से आधार फ़ाइल नाम निकालें


15
url=http://www.foo.bar/file.ext; echo ${url##/*}

मुझे उम्मीद थी कि यह कोड प्रिंट होगा file.ext, लेकिन यह पूरे URL को प्रिंट करता है। क्यों? मैं फ़ाइल नाम कैसे निकाल सकता हूँ?


ठीक है, मैं गलत चीजें होने की उम्मीद कर रहा हूं। वैसे मैं file.ext
ManuelSchneid3r

आप स्ट्रिंग को समाप्त करने की कोशिश कर रहे हैं? कोशिश करो dirname $url। या grep -o 'http://[^/]*' <<<$url
केविन

जवाबों:


28

क्योंकि शब्द को छंटनी के लिए स्ट्रिंग से मेल खाना है। यह इस तरह दिखना चाहिए:

url="http://www.foo.bar/file.ext"; echo "${url##*/}"

धन्यवाद derobert, आपने मुझे सही दिशा में आगे बढ़ाया।


हाह, हम दोनों एक ही समय में महसूस करते हैं। सहायता करके हमें खुशी होगी।
derobert

10

मैनपेज को उद्धृत करने के लिए:

${parameter##word}
   Remove matching prefix pattern.  The word is expanded to produce
   a pattern just as in pathname expansion.  If the pattern matches
   the  beginning of the value of parameter, […]

/*शुरुआत से मेल नहीं खाता, क्योंकि आपका URL hनहीं से शुरू होता है /

एक तुच्छ तरीका है जिसे आप खोज रहे हैं (आपकी टिप्पणी के अनुसार) echo "$url" | rev | cut -d / -f 1 | rev। लेकिन निश्चित रूप से, जो यूआरएल के स्लैश में समाप्त होने के लिए दिलचस्प परिणाम देगा।

एक और तरीका है कि आप जो चाहते हैं वह */इसके बजाय पैटर्न का उपयोग करना हो सकता है ।


खुशी है कि आपने क्या किया जाना चाहिए और मैनपेज का उद्धरण बहुत बड़ा है! उससे मुझे बहुत सहायता मिली! एक बार फिर धन्यवाद! :)
Fadi


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.