如何在Bash中从HTML文件提取黄色背景span内的URL路径?
解决方案:提取HTML中黄色背景Span内的URL路径并去重
当然可以帮你实现这个需求!下面提供两个基于Unix文本处理工具的shell脚本方案,运行./extra-path.sh urls-list.html就能得到你想要的去重结果。
方案一:使用grep + sed + sort + uniq(直观易懂)
创建名为extra-path.sh的脚本,内容如下:
#!/bin/bash # 检查是否传入正确的文件参数 if [ $# -ne 1 ]; then echo "用法: $0 <HTML文件路径>" exit 1 fi # 核心处理流程:提取、清洗、去重 grep -o '<span style='\''background-color:yellow'\''>.*<\/span>' "$1" | \ sed -E 's/<span style='\''background-color:yellow'\''>(.*)<\/span>/\1/' | \ sed -E 's/^>//' | \ sort | uniq
步骤解释:
grep -o:仅匹配并输出包含黄色背景样式的<span>标签及其内容- 第一个
sed:从span标签中提取出中间的路径文本 - 第二个
sed:移除部分路径开头多余的>符号(对应你示例中的>/common/...格式) sort | uniq:对提取的路径排序并去除重复项
方案二:使用awk(更简洁的单工具处理)
如果你更喜欢用awk来完成,这个脚本会更紧凑:
#!/bin/bash # 参数检查 if [ $# -ne 1 ]; then echo "用法: $0 <HTML文件路径>" exit 1 fi # 用awk提取、去重并排序 awk -F'<span style='\''background-color:yellow'\''>|<\/span>' ' /background-color:yellow/ { # 移除开头的>符号 gsub(/^>/, "", $2) # 用数组存储路径(自动去重) paths[$2] } END { # 遍历数组输出所有唯一路径 for (p in paths) print p }' "$1" | sort
步骤解释:
- 用
-F设置字段分隔符为span的开始/结束标签,直接提取中间的路径内容 - 用
gsub清理路径开头的多余符号 - 利用awk数组的键唯一性自动去重
- 最后排序输出,保证结果有序
使用方法:
- 将上述任一脚本保存为
extra-path.sh - 给脚本添加执行权限:
chmod +x extra-path.sh - 运行脚本:
./extra-path.sh urls-list.html
运行后你会得到和示例一致的去重结果:
/common/assets/locale/language_en.props /common/assets/locale/language_en1.props /common/assets/locale/language_en2.props /main
内容的提问来源于stack exchange,提问作者pancho
相关产品推荐
相关产品推荐

