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

如何结合正则数量限定符用Sed提取两匹配模式间的字符串?

sed中数量限定符{2}不生效的原因及解决办法

问题根源

sed默认使用基础正则表达式(BRE),在BRE语法里,{}属于普通字符,不会被解析为数量限定符。你写的[0-9]{2}实际上是在匹配数字{2}这个字面组合,而非连续两位数字,因此无法匹配目标字符串中的11,导致整个替换操作未触发,最终输出原字符串。

两种解决方式

方式1:在BRE中转义数量限定符

将{2}改为\{2\},让sed识别为“匹配前面的元素恰好2次”:

echo '1139    "PAYPAL *SPRINGER TXTBK ORD 11/11 P' | sed 's/^.*"\(.* \) *[0-9]\{2\}\/.*/\1/'

方式2:启用扩展正则表达式(ERE)模式

给sed添加-r参数(Ubuntu自带的GNU sed适用),此时可直接使用不转义的{2}语法,同时捕获组的括号也无需转义:

echo '1139    "PAYPAL *SPRINGER TXTBK ORD 11/11 P' | sed -r 's/^.*"(.* ) *[0-9]{2}\/.*/\1/'

两种方式执行后,都会得到预期输出:

PAYPAL *SPRINGER TXTBK ORD

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:07:25