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

CI/CD脚本中grep -E无结果而grep -Po正常的原因咨询

为什么grep -E无法替代grep -Po得到匹配结果?

核心原因是grep -P和grep -E在正则语法支持和输出逻辑上存在关键差异:

  • 正则语法不兼容
    grep -P启用的是Perl兼容正则表达式(PCRE),支持你用到的零宽断言语法:(?<=<version>)(正向反向预查)和(?=</version>)(正向预查),这些语法能精准提取<version>标签之间的内容,同时不包含标签本身。
    而grep -E启用的是扩展正则表达式(ERE),传统ERE标准不支持零宽断言,你的匹配模式里的(?<=...)和(?=...)会被当作普通字符串处理,自然匹配不到目标内容。

  • 输出行为的差异
    原命令里的-o参数是让grep只输出匹配到的部分,而-E本身不包含这个行为——就算你给grep -E加上-o,因为正则语法不兼容,依然无法识别零宽断言,还是会匹配失败。

替代方案(用ERE实现相同效果)

如果一定要用扩展正则,可以结合sed来提取分组内容,示例:

latestVersionAvailable=$(curl -s $artifactoryPath/maven-metadata.xml | grep -E "<version>$VERSION.*?</version>" | sed -E "s/.*<version>($VERSION.*?)<\/version>.*/\1/" | sort -V | tail -1)

或者用awk直接处理:

latestVersionAvailable=$(curl -s $artifactoryPath/maven-metadata.xml | awk -v ver="$VERSION" '/<version>.*<\/version>/{match($0, "<version>("ver".*?)<\/version>", arr); if(arr[1]) print arr[1]}' | sort -V | tail -1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:30:00