Витягніть ім'я базового файлу з URL-адреси за допомогою bash


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

Я очікував, що цей код буде надрукований file.ext, але він надрукує всю URL-адресу. Чому? Як я можу витягти ім'я файлу?


Гаразд обв, я очікую, що трапляться неправильні речі. Ну я хочу витягти файл.ext
ManuelSchneid3r

Ви намагаєтеся відрізати кінець шнура? Спробуйте dirname $url. Або grep -o 'http://[^/]*' <<<$url.
Кевін

Відповіді:


28

Тому що слово має відповідати рядку, який слід обрізати. Він повинен виглядати так:

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-адреса починається з hне /.

Тривіальний спосіб робити те, що ви шукаєте (відповідно до вашого коментаря) 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.