如何在Bash中从URL列表提取无扩展名的完整目录路径
URL目录路径提取实现方法
你可以直接使用以下awk命令完成需求:
awk -F'/' ' { has_param = (index($0, "?") > 0 || index($0, "#") > 0) ? 1 : 0 sub(/[?#].*/, "", $0) base = $1 "//" $3 "/" for(i=4; i<=NF; i++) { if ($i == "") continue if (i == NF) { if (has_param || index($i, ".") > 0) break } base = base $i "/" res[base] = 1 } } END { for (path in res) print "- " path } ' URL.txt | sort
命令逻辑说明
- 第一步先识别原URL是否带
?查询参数或#锚点,标记为动态请求 - 移除所有URL末尾的参数、锚点内容,仅保留纯路径部分
- 拆分URL得到协议、域名部分,拼接成根路径后逐层遍历后续路径段
- 遇到最后一段时,如果属于动态请求或者带
.扩展名的文件,直接终止遍历,不纳入目录路径 - 每遍历一级路径就拼接成完整目录存入数组自动去重,最后排序输出所有结果
你之前用的rev | cut逻辑仅能提取倒数一级目录,无法输出全层级目录路径,也没有处理参数过滤、扩展名过滤的逻辑,所以无法匹配需求。
内容的提问来源于stack exchange,提问作者Raza Abbas Jaffri
相关产品推荐
相关产品推荐

