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

如何用grep/sed从含多个匹配的单行中提取指定Blender下载URL?

解决ripgrep匹配Blender下载链接时的贪婪匹配问题

问题原因

你使用的rg -o 'https.*tar\.xz'命令出现跨链接匹配的核心原因是正则中的.*为贪婪匹配模式,会尽可能多的匹配字符,只要同一行内存在多个https://开头和.tar.xz结尾的内容,就会将中间所有内容合并为一个匹配结果。

解决方案

方案1:通用提取所有独立.tar.xz链接(推荐)

利用HTML中链接都包裹在双引号内的特性,用[^"]替代.*匹配路径,匹配时遇到双引号就自动停止,完全避免贪婪匹配问题,兼容性最强:

rg -o 'https://[^"]*\.tar\.xz'

如果只需要提取Linux版本的链接,可增加特征过滤:

rg -o 'https://[^"]*linux.*\.tar\.xz'

方案2:使用非贪婪匹配

ripgrep默认支持PCRE2语法,将.*替换为非贪婪匹配符号.*?,会在匹配到第一个.tar.xz后缀时就停止,自动拆分同一行的多个链接:

rg -o 'https://.*?\.tar\.xz'

方案3:精准匹配指定版本链接

如果明确需要匹配目标版本,可直接在正则中加入版本特征,直接命中目标结果:

rg -o 'https://[^"]*blender-3\.0\.0-alpha\+cycles-x.*linux\.x86_64.*\.tar\.xz'

实际使用示例

结合curl直接拉取页面并提取目标链接的完整命令:

curl -s https://builder.blender.org/download/experimental/ | rg -o 'https://[^"]*\.tar\.xz' | grep '3.0.0-alpha+cycles-x.*linux.x86_64-release'

运行后会直接输出你需要的目标URL:
https://builder.blender.org/download/experimental/blender-3.0.0-alpha+cycles-x.a117a9c63c3a-linux.x86_64-release.tar.xz

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 13:45:00