使用Sed从字符串提取版本号的正确正则表达式求助
Sed 提取末尾版本号解决方案
可用命令
直接执行以下命令即可提取目标版本号:
echo "1012-EPS-Test-OF-Something-1.3" | sed -E 's/^.*-([0-9.]+)$/\1/'
执行后输出结果为:1.3
命令说明
-E参数开启扩展正则表达式,无需手动转义捕获分组的括号- 正则逻辑:匹配整行内容,只保留最后一个
-后由数字、点组成的版本号部分^.*-:匹配从行首到最后一个-的所有内容([0-9.]+):捕获组1,匹配1个及以上的数字、点字符,即目标版本号$:匹配行尾,确保匹配到的是行末尾的版本号\1:替换整行内容为捕获组1的匹配结果
该方案同时兼容多段版本号提取,比如待处理字符串为xxx-xxx-2.4.15,也可以正确提取出2.4.15。
原写法错误原因
你之前使用的sed 's/[^0-9.0-9]*//'存在两个问题:
- 字符组
[^0-9.0-9]逻辑冗余,字符组内仅需写[^0-9.]即可表示匹配非数字、非点的字符,重复写0-9不会产生额外效果 - 仅替换了行首的非数字/点内容,会保留字符串开头的
1012,无法过滤前缀内容拿到末尾的版本号
内容的提问来源于stack exchange,提问作者Kunj
相关产品推荐
相关产品推荐

