在 bash 或 zsh 脚本中,如果后者位于环境变量中,我如何从 url(例如unix.stackexchange.com
from ) 中提取主机?http://unix.stackexchange.com/questions/ask
答案1
您可以使用参数扩展,该功能在任何符合 POSIX 标准的 shell 中都可用。
$ export FOO=http://unix.stackexchange.com/questions/ask
$ tmp="${FOO#*//}" # remove http://
$ echo "${tmp%%/*}" # remove everything after the first /
unix.stackexchange.com
一种更可靠但更丑陋的方法是使用实际的 URL 解析器。这是一个示例python
:
$ python3 -c 'import sys; from urllib.parse import urlparse; print(urlparse(sys.argv[1]).netloc)' "$FOO"
unix.stackexchange.com
答案2
如果 URL 都遵循这种模式,我有一个简短而丑陋的 hack 给你:
echo "$FOO" | cut -d / -f 3
答案3
您可以通过多种方式做到这一点,其中一些是:
export _URL='http://unix.stackexchange.com/questions/ask'
echo "$_URL" | sed -ne 'y|/|\n|;s/.*\n\n/;P'
expr "$_URL" : 'http://\([^/]*\)'
echo "$_URL" | perl -lpe '($_) = m|^http://\K[^/]+|g'
perl -le 'print+(split m{/}, $ENV{_URL})[2]'
(set -f; IFS=/; set -- $_URL; echo "$3";)
答案4
也可以使用正则表达式组来完成:
$ a="http://unix.stackexchange.com/questions/ask"
$ perl -pe 's|(.*//)(.*?)(/.*)|\2|' <<<"$a"
unix.stackexchange.com