Більшість опублікованих відповідей не є надійними для 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 є коренем ( /
); коригувати / перевірити, якщо це має значення для вас.)