如何从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