문자열 조작을 사용하여 문자열의 서로 다른 두 부분을 감지하고 제거하는 방법은 무엇입니까?

문자열 조작을 사용하여 문자열의 서로 다른 두 부분을 감지하고 제거하는 방법은 무엇입니까?

URL에서 http:// 또는 https://를 제거하는 스크립트를 만들고 있습니다. 지금까지 http://를 제거했지만 그 안에 넣은 모든 것을 제거하도록 수정하는 방법을 알 수 없는 것 같습니다. 지금까지의 코드는 다음과 같습니다.

domain=$1

inp="${domain//http:'//'}"

echo "$inp"

다음과 같은 코드가 필요합니다.

domain=$1

inp="${domain//http:'//'} OR ${domain//https:'//'}"

echo "$inp"

어떻게 해야 하나요?

답변1

두 번 실행하는 것을 제외하고:

확장된 글로브를 사용하십시오:

shopt -s extglob
v=${domain#http?(s)://}
printf "%s\n" "$v"

Bash 내부 변수를 사용하십시오 BASH_REMATCH.

요구 사항 계약:

if [[ "$domain" =~ https?://(.*) ]]
then
    printf "%s\n" "${BASH_REMATCH[1]}"
else
    printf "Not valid input: '%s'\n" "$domain"
fi

동의가 필요하지 않습니다.

[[ "$domain" =~ (https?://)?(.*) ]] && v="${BASH_REMATCH[2]}"
printf "%s\n" "$v"

답변2

POSIX 쉘 스크립트:

inp="${domain#http*://}"

시험:

for domain in 'https://foo.bar/baz' 'http://foo.bar/baz' ; do \
    inp="${domain#http*://}" ; \
    echo "$inp" ; \
done

산출:

foo.bar/baz
foo.bar/baz

답변3

두 번만 수행하십시오.

inp="${domain//http:'//'}"
inp="${inp//https:'//'}"

관련 정보