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

为何sed扩展正则的加号失效?如何用单条sed提取版本号

单条sed命令实现版本号提取合并

可以用单条sed命令完成需求,核心是修正正则表达式的语法问题:

方案1:使用扩展正则(-E参数)

echo "Python 3.10.2" | sed -E 's/.* ([0-9]+)\.([0-9]+)\..*/\1\2/'

执行后输出310;对于次版本是一位数的场景(比如Python 3.9.5),执行后会输出39,同样符合需求。

你之前的命令报错原因

你之前的命令存在两处语法错误:

  1. 启用-E后,sed使用扩展正则表达式,分组括号()不需要加反斜杠转义,你写的\([0-9]+\)会被当成普通字符处理,导致正则语法错误;
  2. 版本号里的小数点.在正则中代表任意字符,必须转义成\.才能匹配实际的小数点。

方案2:不使用扩展正则(兼容旧版sed)

如果你的环境不支持-E参数,可以用基本正则的写法,此时分组括号需要转义,加号用\{1,\}替代:

echo "Python 3.10.2" | sed 's/.* \([0-9]\{1,\}\)\.\([0-9]\{1,\}\)\..*/\1\2/'

两种方案都能直接提取主版本号和次版本号并合并,无需额外调用grep。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:45:13