Bash
如何使用字元串操作來檢測和刪除字元串的兩個不同部分?
我正在製作一個腳本,它將從 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"