В этой статье мы хотели бы показать, как получить домен из заданного URL в Bash. В примере используется awk, что обусловлено хорошей доступностью на различных платформах.
Быстрое решение
1 | echo 'https://example.com/about' | awk 'match($0,/^[a-z]+:\/\/(www\.)?([^:?#/]+)/,g){print g[2]}'' |
или
1 | echo 'https://example.com/about' | sed -e 's||^[^/]*//||' -e 's|^www\.|||' -e 's|/.*$|||' |
Практический пример
Используемое решение вызывает функцию match(), которая позволяет использовать регулярное выражение с поддержкой групп.
1 2 3 4 5 | #!/bin/bash echo 'https://example.com' | awk 'match($0,/^[a-z]+:\/\/(www\.)?([^:?#/]+)/,g){print g[2]}'' echo 'https://example.com/about' | awk 'match($0,/^[a-z]+:\/\/\/(www\.)?([^:?#/]+)/,g){print g[2]}' echo 'https://www.example.com' | awk 'match($0,/^[a-z]+:\/\/\/(www\.)?([^:?#/]+)/,g){print g[2]}' echo 'https://www.example.com/about' | awk 'match($0,/^[a-z]+:\/\/\/(www\.)?([^:?#/]+)/,g){print g[2]}' |
Вывод
1 2 3 4 | example.com example.com example.com example.com |
Многократно используемый пример
1 2 3 4 5 | #!/bin/bash function get_domain() { echo "$1" | awk 'match($0,/^[a-z]+:\/\/(www\.)?([^:?#/]+)/,g){print g[2]}' } |
Пример использования 1
1 2 3 4 | get_domain 'https://example.com' get_domain 'https://example.com/about' get_domain 'https://www.example.com' get_domain 'https://www.example.com/about' |
Пример использования 2
1 2 3 4 5 6 7 8 9 | domain_1="$(get_domain 'https://example.com')" domain_2="$(get_domain 'https://example.com/about')" domain_3="$(get_domain 'https://www.example.com')" domain_4="$(get_domain 'https://www.example.com/about')" echo $domain_1 echo $domain_2 echo $domain_3 echo $domain_4 |