bashを使用してURLからベースファイル名を抽出する


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

このコードは印刷すると予想してfile.extいましたが、URL全体が印刷されます。どうして?ファイル名を抽出するにはどうすればよいですか?


わかりましたobv私は間違ったことが起こると思っています。file.extを抽出したい
ManuelSchneid3r

あなたは文字列の終わりをカットしようとしていますか?試してくださいdirname $url。またはgrep -o 'http://[^/]*' <<<$url
ケビン

回答:


26

単語はトリミングする文字列と一致する必要があるためです。次のようになります。

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

デロバートのおかげで、あなたは私を正しい方向に導いた。


ああ、私たちは両方同時にそれを認識しています。助けてくれてうれしい。
デロバート

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はhnotで始まるため、先頭と一致しません/

(コメントによると)探していることを行う簡単な方法はecho "$url" | rev | cut -d / -f 1 | revです。しかし、もちろん、スラッシュで終わるURLについては興味深い結果が得られます。

必要なことを行う別の方法は、*/代わりにパターンを使用することです。


何をする必要があるのか​​説明してくれて、マンページからの引用は大きなプラスです!それは私を大いに助けてくれました!再度、感謝します!:)
ファディ


4

Bash Extended Globbingも参照してください。ただし、この場合、拡張グロブは必須ではありません。

 shopt -s extglob; url=http://www.foo.bar/file.ext; echo ${url##+(*/)}

出力: file.ext

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.