我怎样才能使这个正则表达式相对 URL 提取在 grep 中工作?

How can I make this regex relative URL extraction work in grep?

文件中有这个字符串,只想提取相关的 link:

<a href="/FreeCAD/FreeCAD-Bundle/releases/download/weekly-builds/FreeCAD_weekly-builds-28909-2022-05-20-conda-Linux-x86_64-py39.AppImage" rel="nofollow" data-skip-pjax>

这适用于 https://regexr.com/6m4vg :

/FreeCAD/[^]*AppImage

但是 returns grep 中没有任何内容。

grep -E '/FreeCAD/\[^]*AppImage' somefile

我怎样才能让它发挥作用?谢谢。

编辑:源文件:

wget https://github.com/FreeCAD/FreeCAD-Bundle/releases/tag/weekly-builds

期望的输出:

/FreeCAD/FreeCAD-Bundle/releases/download/weekly-builds/FreeCAD_weekly-builds-28909-2022-05-20-conda-Linux-x86_64-py39.AppImage

您需要使用 [^"]* 而不是 [^]*:

grep -o '/FreeCAD/[^"]*AppImage' somefile

/FreeCAD/[^]*AppImage 在线工作,因为您针对 ECMAScript 引擎测试模式,但 grep -E 使用 POSIX ERE 正则表达式风格,其中否定括号表达式不应为空。

[^] 在 ECMAScript 正则表达式中匹配任何字符,所以在这里,由于 grep 逐行工作,您可以将其替换为 .*.

但是,由于您要匹配的文本不能包含 ",您还可以使用更合适的 [^"]* 模式来匹配 " 字符以外的零个或多个字符.