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.