You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用bash脚本从CVEdetails网页源码中提取vendor和product字段值

解决方案

你可以通过文本匹配工具组合实现提取需求,以下提供两种无需额外安装依赖(或仅需常用工具)的实现方式:


方案1:使用自带grep+sed实现(无额外依赖)

直接通过管道流式处理页面内容,不需要生成临时文件:

# 拉取页面内容到变量
cve_page=$(wget -qO- https://www.cvedetails.com/cve/CVE-2017-3169)

# 提取vendor值
vendor=$(echo "$cve_page" | grep -A 10 "Vulnerable Versions" | grep -m1 '/vendor/' | sed 's/.*>\([^<]*\)<\/a>.*/\1/' | xargs)

# 提取product值
product=$(echo "$cve_page" | grep -A 10 "Vulnerable Versions" | grep -m1 '/product/' | sed 's/.*>\([^<]*\)<\/a>.*/\1/' | xargs)
  • 逻辑说明:先定位到Vulnerable Versions表头之后的10行内容,分别匹配vendor和product对应的链接行,提取a标签的文本内容后用xargs去除首尾空白字符。
  • 执行后可直接通过echo $vendor echo $product验证结果,输出分别为Apache和Http Server。

方案2:使用pcregrep多行匹配(写法更简洁)

如果你的系统预装了pcregrep,可通过正则捕获组直接提取:

# 拉取页面内容到变量
cve_page=$(wget -qO- https://www.cvedetails.com/cve/CVE-2017-3169)

# 提取vendor值
vendor=$(echo "$cve_page" | pcregrep -M -o1 'Vulnerable Versions[\s\S]*?<tr>[\s\S]*?<a[^>]*>([^<]+)<\/a>')

# 提取product值
product=$(echo "$cve_page" | pcregrep -M -o1 'Vulnerable Versions[\s\S]*?<tr>[\s\S]*?<a[^>]*>[^<]+<\/a>[\s\S]*?<a[^>]*>([^<]+)<\/a>')
  • 参数说明:-M开启多行匹配支持,-o1输出第一个捕获组的内容,[\s\S]*?是惰性匹配任意字符,避免跨条目匹配。

内容的提问来源于stack exchange,提问作者CrisoNikon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:54:05