환경 변수에서 하위 문자열 추출

환경 변수에서 하위 문자열 추출

bash 또는 zsh 스크립트에서 unix.stackexchange.comURL이 환경 변수에 있는 경우 URL(예: )에서 호스트를 어떻게 추출할 수 있습니까?http://unix.stackexchange.com/questions/ask

답변1

모든 POSIX 호환 셸에서 사용할 수 있는 매개변수 확장을 사용할 수 있습니다.

$ 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이 모두 이 패턴을 따른다면 짧고 보기 흉한 방법을 알려드리겠습니다.

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

관련 정보