Большинство опубликованных ответов не являются надежными для URL-адресов, которые содержат строки запроса или цели, такие как, например, следующие:
https://example.com/this/is/a/path?query#target
Python имеет разбор URL в своей стандартной библиотеке; легче позволить этому сделать это. Например,
from urllib import parse
import sys
path = parse.urlparse(sys.stdin.read().strip()).path
print("/" if not path or path == "/" else path.rsplit("/", 1)[-1])
Вы можете сжать это в один python3 -c
для использования в сценарии оболочки:
echo 'https://example.com/this/is/a/path/componets?query#target' \
| python3 -c 'from urllib import parse; import sys; path = parse.urlparse(sys.stdin.read().strip()).path; print("/" if not path or path == "/" else path.rsplit("/", 1)[-1])'
(Вы также можете оставить сценарий неработающим для удобства чтения. '
Позволит вводить новые строки.)
Конечно, теперь ваш сценарий оболочки имеет зависимость от Python.
(Я немного не уверен насчет того, пытается ли он обрабатывать случаи, когда компонент пути URL является корневым ( /
); настройте / проверьте, если это важно для вас.)