如何按子域名列表筛选带参数URL并分类存储为对应子域名文件?
错误原因
你现有命令的错误来自两处:
- 你将awk的执行结果放在了
$()中,shell的命令替换规则会把输出的域名内容当作系统命令执行,系统不存在对应命令就抛出了command not found报错。 - awk的逻辑不符合需求:你直接打印了传入的域名变量
u,没有做urls_params.txt的行匹配过滤,就算去掉$()也得不到你要的带参数URL结果。
正确解决方法
你已经提前生成了纯域名的list文件的话,直接执行以下命令即可:
while read -r domain; do # 匹配对应域名的带参URL,写入以域名命名的txt文件 grep -F "://${domain}/" urls_params.txt > "${domain}.txt" done < list
- 这里加了
-F参数让grep做固定字符串匹配,避免域名里的特殊符号(比如-)被当成正则规则导致匹配异常 - 匹配规则写为
://${domain}/是为了避免域名和URL参数里的内容重复,产生误匹配
如果你不想提前预处理listofdomains.txt,也可以一步完成提取+匹配导出:
while read -r origin_url; do # 直接从原始带http/https的域名中提取纯域名部分 domain=$(sed -E 's#^https?://##' <<< "$origin_url") grep -F "://${domain}/" urls_params.txt > "${domain}.txt" done < listofdomains.txt
执行完成后,当前目录会生成example.com.txt、www.example.com.txt、abc-test.example.com.txt三个文件,内容完全符合你的预期。
内容的提问来源于stack exchange,提问作者Emad
相关产品推荐
相关产品推荐

