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

如何将指定sed脚本改写为单行命令?解决括号不匹配报错

解决sed单行命令的unmatched {报错问题

问题场景

原多行sed脚本(可正常运行):

sed -i "/INTERPRETER_PYTHON_DISTRO_MAP/,/version_added/ {
    /default/a\    linux:\n      '8': \/usr\/local
    }" base.yaml

尝试改写为单行命令后无法运行,命令如下:

sed -i "/INTERPRETER_PYTHON_DISTRO_MAP/,/version_added/ {/default/a\    linux:\n      '8': \/usr\/local}" base.yaml

报错信息:

sed: -e expression #1, char 0: unmatched `{'

问题原因

将多行sed命令压缩为单行时,sed需要明确的命令分隔符。原多行脚本中换行起到了分隔作用,但单行时必须用**分号;**来分隔命令块内的逻辑以及命令块的结束边界,否则sed无法识别{的闭合位置。

正确的单行命令

方案1:添加分号闭合命令块

sed -i "/INTERPRETER_PYTHON_DISTRO_MAP/,/version_added/ {/default/a\    linux:\n      '8': \/usr\/local;}" base.yaml

方案2:更兼容的写法(部分sed版本要求{后无空格)

sed -i "/INTERPRETER_PYTHON_DISTRO_MAP/,/version_added/{/default/a\    linux:\n      '8': \/usr\/local;}" base.yaml

说明

分号的作用是告诉sed:/default/a\...这个追加命令已经结束,接下来是闭合命令块的}。添加后sed就能正确解析整个命令结构,不会再出现unmatched {的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:45:00