История изменений
Исправление Zmicier, (текущая версия) :
А вообще, что бы вы ни прочитали, все равно пойдете гуглить — найдете кучу отборного говнокода на смеси Баша с АВКом (и хорошо, если не с Седом), каким богата всемирная паутина, и уверуете, что так и надо.
Давайте, я все-таки лучше расскажу. Только сперва надо найти общий язык, а то вы на каком-то своем разговариваете, я вас не понимаю.
Итак, открываем действующий стандарт на URI — RFC 3986, изучаем, как что называется, и заодно находим рекомендуемое регулярное выражение для частного случая разбора URI, когда имя пользователя, пароль, порт выделять не надо. Это вполне ваш случай.
Используем его:
$ uri='https://www.linux.org.ru/forum/general/13032292'
$ [[ $uri =~ ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? ]]
$ scheme="${BASH_REMATCH[2]}"
$ authority="${BASH_REMATCH[4]}"
$ path="${BASH_REMATCH[5]}"
$ query="${BASH_REMATCH[7]}"
$ fragment="${BASH_REMATCH[9]}"
Если теперь нужно разложить имя узла по точкам, то именно это и делаем. И аналогично с путем.
$ IFS='.' read -ra domains <<< "$authority"
$ IFS='/' read -ra path_segments <<< "$path"
Потом используем, что нам надо:
$ printf '%s\n' "$scheme" "${domains[-1]}" "${path_segments[-1]}"
https
ru
13032292
Исходная версия Zmicier, :
А вообще, что бы вы не прочитали, все равно пойдете гуглить — найдете кучу отборного говнокода на смеси Баша с АВКом (и хорошо, если не с Седом), каким богата всемирная паутина, и уверуете, что так и надо.
Давайте, я все-таки лучше расскажу. Только сперва надо найти общий язык, а то вы на каком-то своем разговариваете, я вас не понимаю.
Итак, открываем действующий стандарт на URI — RFC 3986, изучаем, как что называется, и заодно находим рекомендуемое регулярное выражение для частного случая разбора URI, когда имя пользователя, пароль, порт выделять не надо. Это вполне ваш случай.
Используем его:
$ uri='https://www.linux.org.ru/forum/general/13032292'
$ [[ $uri =~ ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? ]]
$ scheme="${BASH_REMATCH[2]}"
$ authority="${BASH_REMATCH[4]}"
$ path="${BASH_REMATCH[5]}"
$ query="${BASH_REMATCH[7]}"
$ fragment="${BASH_REMATCH[9]}"
Если теперь нужно разложить имя узла по точкам, то именно это и делаем. И аналогично с путем.
$ IFS='.' read -ra domains <<< "$authority"
$ IFS='/' read -ra path_segments <<< "$path"
Потом используем, что нам надо:
$ printf '%s\n' "$scheme" "${domains[-1]}" "${path_segments[-1]}"
https
ru
13032292