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

使用sed -E/-r替换含{和$的字符串时{匹配异常排查

问题原因与解决方法

核心问题是你在sed -r(扩展正则ERE模式)下错误转义了{,导致正则试图匹配\{(反斜杠+左大括号),但原字符串里只有{,因此匹配失败。

sed正则模式的关键规则

sed分两种正则模式,{}的处理逻辑完全不同:

  • 基础正则(BRE,默认模式):要使用量词(如指定重复次数),需给{}加反斜杠(比如a\{2\}匹配2个连续的a);匹配字面{}时,直接写即可,无需转义。
  • 扩展正则(ERE,-r/-E参数):量词无需转义(比如a{2}直接匹配2个连续的a);匹配字面{}时,同样直接写即可——如果转义{写成\{,反而会匹配\+{的组合,这显然不符合你的需求。

修正后的命令

把正则里的:=后的\{改成{即可:

part=5
echo ': "${TARGET_PART:=${MMC_PART2}}"' | sed -r "s/:={(MMC_PART).}}/\1$part}}/g"

执行后会输出预期结果:: "${TARGET_PART:=${MMC_PART5}}"

你第二个命令用.匹配{能生效,是因为.会匹配任意单个字符,刚好命中了{,但这属于巧合,并非正确的匹配方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:59:50