如何使用Shell脚本或Python将带数字范围的域名格式展开为多个单独域名
如何使用Shell脚本或Python将带数字范围的域名格式展开为多个单独域名
我来给你分享两种实用的实现方法,不管是日常运维快速处理,还是集成到批量脚本里都能用得上,分别用Shell和Python来搞定这个需求~
一、Shell脚本实现
Shell的思路是先把原始域名拆分成前缀、数字范围、后缀三个核心部分,再生成指定范围内的带前导零数字,最后拼接成完整域名。这里用sed做正则拆分,seq生成有序数字序列:
# 定义需要处理的原始域名 original_domain="acme[01:05].example.com" # 用正则拆分提取各部分:前缀、起始数字、结束数字、后缀 prefix=$(echo "$original_domain" | sed -E 's/^(.*)\[([0-9]+):([0-9]+)\](\..*)$/\1/') start_num=$(echo "$original_domain" | sed -E 's/^(.*)\[([0-9]+):([0-9]+)\](\..*)$/\2/') end_num=$(echo "$original_domain" | sed -E 's/^(.*)\[([0-9]+):([0-9]+)\](\..*)$/\3/') suffix=$(echo "$original_domain" | sed -E 's/^(.*)\[([0-9]+):([0-9]+)\](\..*)$/\4/') # 循环生成每个域名,seq -w 保证数字带前导零(和原始格式一致) for num in $(seq -w $start_num $end_num); do echo "${prefix}${num}${suffix}" done
运行脚本后会输出:
acme01.example.com acme02.example.com acme03.example.com acme04.example.com acme05.example.com
小提示:如果你的系统
seq不支持-w参数(比如部分BSD系统),可以改用printf手动格式化数字:for num in $(seq $start_num $end_num); do printf "%s%02d%s\n" "$prefix" "$num" "$suffix" done这里的
%02d表示补零到两位,对应原始数字的长度。
二、Python实现
Python的方法更灵活,适合需要集成到大型项目或做复杂扩展的场景,用正则表达式精准拆分后,循环生成目标域名:
import re original_domain = "acme[01:05].example.com" # 用正则匹配拆分域名的各个组成部分 pattern = re.compile(r'^(.*)\[(\d+):(\d+)\](\..*)$') match_result = pattern.match(original_domain) if match_result: prefix = match_result.group(1) # 提取起始和结束数字,转为整数 start = int(match_result.group(2)) end = int(match_result.group(3)) suffix = match_result.group(4) # 获取原始数字的长度,保证补零后和原格式一致 num_digits = len(match_result.group(2)) # 遍历数字范围,生成每个域名 for num in range(start, end + 1): # 格式化数字,补前导零 formatted_num = str(num).zfill(num_digits) print(f"{prefix}{formatted_num}{suffix}") else: print("输入的域名格式不正确,请检查是否包含[xx:xx]这样的数字范围哦")
运行这段代码会输出完全符合需求的域名列表,而且不管原始数字是1位、2位还是更多位,zfill(num_digits)都会自动补零到对应长度,兼容性拉满。
内容来源于stack exchange
相关产品推荐
相关产品推荐

