Bash

如何使用字元串操作來檢測和刪除字元串的兩個不同部分?

  • May 18, 2016

我正在製作一個腳本,它將從 URL 中刪除 http:// 或 https:// 。到目前為止,我已經刪除了 http://,但我似乎無法弄清楚如何修改它,以便刪除他們輸入的任何一個。這是到目前為止的程式碼:

domain=$1

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

echo "$inp"

我需要看起來像這樣的程式碼:

domain=$1

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

echo "$inp"

我該怎麼做呢?

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

除了執行兩次:

使用擴展全域:

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"

引用自:https://unix.stackexchange.com/questions/283463