문자열 조작을 사용하여 문자열의 서로 다른 두 부분을 감지하고 제거하려면 어떻게 해야 합니까?

문자열 조작을 사용하여 문자열의 서로 다른 두 부분을 감지하고 제거하려면 어떻게 해야 합니까?

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:'//'}"

관련 정보