
Я создаю скрипт, который удалит 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:'//'}"