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

Bash正则提取最后一个release-与--间内容的实现问题

在Bash中提取最后一次出现的“release-”与“--”之间的内容

问题分析

你的脚本存在两个核心问题:

  • BASH_REMATCH数组引用错误:直接写$BASH_REMATCH[1]会被解析为「数组第一个元素」拼接字符串[1],正确的引用格式应为${BASH_REMATCH[1]}。
  • 正则分组冗余:最外层括号完全多余,它会把整个匹配内容放入BASH_REMATCH[0],而你需要的是内层括号捕获的目标片段。

解决方案1:修正正则与数组引用

利用Bash的贪婪正则匹配特性(自动匹配最后一次出现的release-),调整脚本如下:

artifactoryVersion="inte_integration-abc-abcde-abcdefg-release-release-PI_4.1-Sprint-3.1a--1.0.2-RELEASE"

if [[ "$artifactoryVersion" =~ .*release-(.*)--.* ]]; then
    echo "${BASH_REMATCH[1]}"
fi

执行后输出:

PI_4.1-Sprint-3.1a

解决方案2:Bash内置字符串操作(无外部命令)

无需正则,直接用Bash的字符串截取功能实现,效率更高:

artifactoryVersion="inte_integration-abc-abcde-abcdefg-release-release-PI_4.1-Sprint-3.1a--1.0.2-RELEASE"

# 截取--之前的所有内容
temp=${artifactoryVersion%%--*}
# 截取最后一个release-之后的内容
result=${temp##*release-}

echo "$result"

解决方案3:sed命令(适合批量处理)

如果需要处理多行文本或管道输入,可使用sed:

echo "$artifactoryVersion" | sed -E 's/.*release-(.*)--.*/\1/'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:01:00