如何用Grep从HTML文件提取图片URL、商品名并移除a href元素
解决方案
方案1:使用AWK脚本处理(无需额外工具)
AWK可以逐行扫描文件,提取并整理所需内容,适合处理格式固定的HTML文件。
创建一个名为extract.awk的脚本:
BEGIN { # 定义域名前缀 domain = "https://domainn.com" } # 匹配img标签,提取src属性值 /<img src="([^"]+)"/ { # 提取src内容,处理开头可能存在的斜杠,避免重复拼接 img_src = domain "/" gensub(/^\/?/, "", 1, gensub(/src="|"|>/, "", "g", $0)) } # 匹配<br>标签,提取后面的商品名称 /<br>/ { # 截取<br>之后的文本,去除前后空白字符 product_name = substr($0, index($0, "<br>") + 4) gsub(/^\s+|\s+$/, "", product_name) } # 遇到</a>标签时,输出格式化后的结果 /<\/a>/ { printf "<p><a href=\"%s/\" rel=\"nofollow noreferrer\">%s/</a>\n%s</p>\n", img_src, img_src, product_name # 重置变量,避免影响下一个条目 img_src = "" product_name = "" }
执行命令:
awk -f extract.awk your-html-file.html
方案2:用Sed+Grep+Paste组合命令
通过多个基础命令配合,分步完成移除标签、提取内容和格式拼接:
# 同时提取图片URL和商品名称,拼接成目标格式 paste <( # 提取img的src并补全域名前缀 grep -oP '<img src="\K[^"]+' your-html-file.html | sed 's/^/https:\/\/domainn.com\//' ) <( # 提取<br>后的商品名称,去除前后空白 grep -oP '<br>\s*\K[^<]+' your-html-file.html | sed 's/^\s*//; s/\s*$//' ) | while read img product; do echo "<p><a href=\"$img/\" rel=\"nofollow noreferrer\">$img/</a>" echo "$product</p>" done
方案3:用Pup+JQ解析HTML(更可靠)
如果HTML格式可能存在变化,推荐使用专业的HTML解析工具pup和JSON处理工具jq,避免正则解析HTML的局限性。
先安装依赖(以Debian/Ubuntu为例):
sudo apt install pup jq
执行提取命令:
pup 'div.cell small-6 medium-4 large-3 a json{}' your-html-file.html | \ jq -r '.[] | .children[] | select(.tag == "img") | .attrs.src as $img | .nextSibling.text as $name | "<p><a href=\"https://domainn.com/\($img)/\" rel=\"nofollow noreferrer\">https://domainn.com/\($img)/</a>\n\($name)</p>"'
内容的提问来源于stack exchange,提问作者bultim
相关产品推荐
相关产品推荐

