如何基于含通配符的黑名单文件批量过滤子域名列表
解决方案
直接用支持通配规则拆分的awk命令即可实现需求,命令如下:
awk ' BEGIN { IGNORECASE = 1 } NR == FNR { # 处理黑名单规则 if ($0 ~ /^\*\./) { # 提取通配符后缀,去掉前面的*. wildcard_suffix = substr($0, 3) wildcards[wildcard_suffix] = 1 } else { # 精确匹配规则 exact[$0] = 1 } next } { # 先检查精确匹配 if (exact[$0]) next # 检查是否匹配任意通配符后缀(即域名结尾为 .通配后缀) match_flag = 0 for (suffix in wildcards) { if (ends_with($0, "." suffix)) { match_flag = 1 break } } if (!match_flag) print } # 实现ends_with工具函数 function ends_with(str, suffix) { return substr(str, length(str) - length(suffix) + 1) == suffix } ' blacklist.txt subdomains.txt
执行逻辑说明
- 首先将黑名单分为两类规则存储:精确匹配规则、通配符后缀规则
- 处理待过滤域名时,先判断是否命中精确匹配,命中则直接丢弃
- 未命中精确匹配的域名,遍历所有通配符后缀,判断域名是否以
.通配后缀结尾,命中则丢弃 - 所有规则都未命中的域名即为最终结果输出
测试验证
针对你给出的样本文件,执行上述命令后输出结果如下:
abc-test.example.com www.example.com
完全符合预期输出。
内容的提问来源于stack exchange,提问作者Emad
相关产品推荐
相关产品推荐

