如何从bash shell脚本中的URL获取域名
时间:2020-01-09 10:38:44 来源:igfitidea点击:
如何在Linux或类似Unix的操作系统下使用bash shell脚本从URL字符串(例如https://www.theitroad.local/index.php)中提取或获取域名?
您可以使用标准的Unix命令(例如sed,awk,grep,Perl,Python等)从URL获取域名。
无需编写正则表达式。
让我们使用各种命令和选项从Linux或类Unix系统的给定变量中获取域部分。
从完整的网址获取域名
假设您的网址名称存储在bash shell变量中,例如$x:
x='https://www.theitroad.local/faq/copy-command/'
您可以按以下方式使用awk:
echo "$x" | awk -F/ '{print }'
### OR ###
awk -F/ '{print }'
输出示例:
www.theitroad.local
使用sed从URL提取域名
这是一个示例sed命令:
url="https://www.theitroad.local/faq/copy-command" echo "$url" | sed -e 's|^[^/]*//||' -e 's|/.*$||'
使用bash shell参数替换从URL中提取域名
另一个选择是使用bash shell参数替换:
# My shell variable
f="https://www.theitroad.local/faq/copy-command/"
## Remove protocol part of url ##
f="${f#http://}"
f="${f#https://}"
f="${f#ftp://}"
f="${f#scp://}"
f="${f#scp://}"
f="${f#sftp://}"
## Remove username and/or username:password part of URL ##
f="${f#*:*@}"
f="${f#*@}"
## Remove rest of urls ##
f=${f%%/*}
## Show domain name only ##
echo "$f"
Shell脚本示例
通过匹配域名部分从Cloudflare清除URL的Shell脚本:
#!/bin/bash
zone_id=""
api_key=""
urls="$@"
bon=$(tput bold)
boff=$(tput sgr0)
c=1
[ "$urls" == "" ] && { echo "Usage: ##代码## url"; exit 1; }
clear
echo "Purging..."
echo
for u in $urls
do
echo -n "${bon}${c}${boff}.${u}: "
## Get domain name ##
d="$(echo $u | awk -F/ '{ print }')"
## Set API_KEY, Email_ID, and ZONE_ID as per domain ##
case $d in
www.theitroad.local) zone_id="ID_1"; api_key="MY_KEY_1"; email_id="[email protected]";;
theitroad.com) zone_id="ID_2"; api_key="MY_KEY_2"; email_id="[email protected]";;
*) echo "Domain not configured."; continue;;
esac
## Do it ##
curl -X DELETE "https://api.cloudflare.com/client/v4/zones/${zone_id}/purge_cache" \
-H "X-Auth-Email: ${email_id}" \
-H "X-Auth-Key: ${api_key}" \
-H "Content-Type: application/json" \
--data "{\"files\":[\"${u}\"]}"
echo
(( c++ ))
done
echo

