如何使用字符串操作来检测和删除字符串的两个不同部分?

如何使用字符串操作来检测和删除字符串的两个不同部分?

我正在制作一个脚本,该脚本将从 URL 中删除 http:// 或 https:// 。到目前为止,我已经删除了 http://,但我似乎不知道如何修改它,以便删除它们输入的任何内容。这是到目前为止的代码:

domain=$1

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

echo "$inp"

我需要如下所示的代码:

domain=$1

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

echo "$inp"

我该怎么做呢?

答案1

除了运行两次之外:

使用扩展的 glob:

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 shell 脚本:

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

相关内容