Bash kullanarak bir URL'den temel dosya adını çıkarın


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

Bu kodun yazdırılmasını bekledim file.ext, ancak tüm URL'yi yazdırıyor. Neden? Dosya adını nasıl ayıklayabilirim?


Tamam obv Yanlış şeylerin olmasını bekliyorum. Ben file.ext ayıklamak istiyorum
ManuelSchneid3r

İpin ucunu kesmeye mi çalışıyorsun? Deneyin dirname $url. Veya grep -o 'http://[^/]*' <<<$url.
Kevin

Yanıtlar:


28

Çünkü sözcük kırpılacak dizeyle eşleşmelidir. Şöyle görünmelidir:

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

Teşekkürler derobert, beni doğru yöne yönlendirdin.


Hah, ikimiz de bunu aynı anda fark ediyoruz. Yardım etmekten memnunum.
derobert

10

Sayfayı alıntılamak için:

${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'niz ile başlamadığı için başlangıç ​​ile heşleşmiyor /.

Aradığınızı yapmanın önemsiz bir yolu (yorumunuza göre) echo "$url" | rev | cut -d / -f 1 | rev. Ancak elbette bu, eğik çizgi ile biten URL'ler için ilginç sonuçlar verecektir.

İstediğinizi yapmanın başka bir yolu, */bunun yerine deseni kullanmak olabilir .


Ne yapılması gerektiğini bir açıklama verdi sevindim ve manpage teklif büyük bir artı! Bu bana çok yardımcı oldu! Tekrar teşekkürler! :)
Fadi

6

basename(1) URL'lerle de çalışır, böylece şunları yapabilirsiniz:

url=http://www.foo.bar/file.ext; basename $url

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.