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

如何用sed仅替换{{CODE}}-project而不替换{{CODE}}-project-start?

解决sed替换时误匹配的问题

你遇到的是sed替换时的部分匹配问题——原表达式会命中{{CODE}}-project-start里的前缀部分,导致不该替换的内容被修改。下面是几种可行的解决方式:

  • 针对整行就是目标字符串的场景
    给替换表达式加上行尾锚定符$,确保只替换独立一行的{{CODE}}-project:

    REP="s/{{CODE}}-project$/123-project/"
    cat schema.yml | sed "$REP"
    

    原理:$代表行的结束位置,只有当{{CODE}}-project刚好是整行内容时才会被替换,不会影响后面带-start的行。

  • 适用更广泛场景的完整单词匹配
    用GNU sed的单词边界锚定符\<和\>,限定只替换作为完整单词存在的{{CODE}}-project:

    REP="s/\<{{CODE}}-project\>/123-project/"
    cat schema.yml | sed "$REP"
    

    原理:\<标记单词的起始,\>标记单词的结束,{{CODE}}-project-start里的前缀后面还有字符,不满足单词结束的条件,因此不会被匹配替换。

  • 用负向预查精确排除特定后缀
    如果需要灵活排除特定后缀(比如-start),可以借助sed的扩展正则负向预查(需要加-E选项启用扩展正则):

    REP="s/{{CODE}}-project(?!-start)/123-project/"
    cat schema.yml | sed -E "$REP"
    

    原理:(?!-start)表示匹配{{CODE}}-project后面不跟着-start的情况,精准跳过不需要修改的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:13:13