如何在Bash脚本中实现从各类URL提取domain.tld的check_domain函数?
Bash check_domain 函数实现
直接使用如下函数即可覆盖你列举的所有输入场景:
function check_domain() { # 处理输入URL,提取目标域名 local raw_url="$1" # 移除协议头、www前缀,再截断后续路径/参数部分 local domain=$(echo "$raw_url" | sed -E 's/(^https?:\/\/)?(www\.)?//i' | cut -d '/' -f 1) # 两种输出方式二选一: # 方式1:直接打印结果,外部可通过变量接收,比如 res=$(check_domain "https://www.test.com") echo "$domain" # 方式2:写入全局变量供外部直接调用 # DOMAIN_RESULT="$domain" }
测试验证
你可以用以下命令测试所有示例场景:
# 测试用例 check_domain http://domain.tld # 输出 domain.tld check_domain https://domain.tld # 输出 domain.tld check_domain http://www.domain.tld # 输出 domain.tld check_domain https://www.domain.tld # 输出 domain.tld check_domain www.domain.tld # 输出 domain.tld check_domain domain.tld # 输出 domain.tld check_domain https://stackoverflow.com # 输出 stackoverflow.com check_domain http://www.stackoverflow.com # 输出 stackoverflow.com
实现逻辑说明
sed -E 's/(^https?:\/\/)?(www\.)?//i'部分使用扩展正则,匹配开头可选的http/https协议头(末尾i参数忽略大小写,兼容HTTP://这类大写开头的输入)、以及可选的www.前缀,匹配到的内容直接替换为空cut -d '/' -f 1部分用于兼容带路径的URL输入,比如https://www.domain.tld/post/1,按/切割后取第一部分,仅保留域名内容
内容的提问来源于stack exchange,提问作者CrisoNikon
相关产品推荐
相关产品推荐

