У меня есть ссылка http:
http://www.test.com/abc/def/efg/file.jar
и я хочу сохранить последнюю часть file.jar в переменную, поэтому строка вывода будет «file.jar».
Условие : ссылка может иметь разную длину, например:
http://www.test.com/abc/def/file.jar.
Я попробовал это так:
awk -F'/' '{print $7}'
Но проблема в длине URL, поэтому мне нужна команда, которую можно использовать для любой длины URL.
bash
shell-script
awk
cut
FunTomas
источник
источник
file=${myurl##*/}
, затем использовать жадное обратное сопоставление, чтобы выполнить резервное копирование?
(не забывайте избегать его!), Напримерecho ${file%%\?*}
basename
иdirname
работать хорошо для URL тоже:источник
basename
иdirname
разделяет строки на /, и это также работает с URL-адресами, по крайней мере, до тех пор, пока они не имеют локальной части (хотя не с URI вообще)./relative/URI/with/absolute/path/to/resource.txt
,relative/path/to/resource.txt
,../../../resource.txt
иresource.txt
en.wikipedia.org/wiki/.../relative/path
может быть либо путем к файловой системе, либо относительным URI. Но какой из них это зависит от контекста. Когда он используется в качестве пути к файловой системе, это не URI. Когда он используется в качестве URI, это не путь к файловой системе. Сказать, что это URI только потому, что он соответствует синтаксису, все равно, что сказать, что каждое из слов в этом комментарии также является URI.С помощью
awk
вы можете использовать$NF
, чтобы получить последнее поле, независимо от количества полей:Если вы храните эту строку в переменной оболочки, вы можете использовать:
источник
Большинство опубликованных ответов не являются надежными для URL-адресов, которые содержат строки запроса или цели, такие как, например, следующие:
https://example.com/this/is/a/path?query#target
Python имеет разбор URL в своей стандартной библиотеке; легче позволить этому сделать это. Например,
Вы можете сжать это в один
python3 -c
для использования в сценарии оболочки:(Вы также можете оставить сценарий неработающим для удобства чтения.
'
Позволит вводить новые строки.)Конечно, теперь ваш сценарий оболочки имеет зависимость от Python.
(Я немного не уверен насчет того, пытается ли он обрабатывать случаи, когда компонент пути URL является корневым (
/
); настройте / проверьте, если это важно для вас.)источник
Один метод заключается
rev
в URL, затем вырезать поле, а затемrev
снова. например:Выход:
Пример 2:
Выход:
источник