Как использовать манипуляцию строками для обнаружения и удаления двух разных частей строки?

Как использовать манипуляцию строками для обнаружения и удаления двух разных частей строки?

Я создаю скрипт, который удалит http:// или https:// из URL. Пока что мне удалось удалить 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:'//'}"

Связанный контент