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

macOS 15.0.1下sed命令报错:unterminated substitute pattern

macOS 15.0.1下sed命令随机报错问题解决

首先明确:macOS自带的是BSD sed,和你之前长期使用的GNU sed存在语法差异,系统更新后BSD sed的行为校验更严格,导致原命令触发错误。

问题根源

你用的sed -i 's/--.*//g' sr-api/*.sql是GNU sed的写法,BSD sed对-i选项的要求更苛刻——必须明确指定备份后缀(哪怕不需要备份文件,也要加空字符串)。另外,系统更新后,BSD sed对文件名通配符展开后的处理逻辑调整,哪怕目标文件没有注释,也会因命令格式不兼容抛出“未终止替换模式”的错误。

修复方案

方案1:适配BSD sed语法

直接修改命令,给-i加上空备份后缀(注意空字符串和单引号之间不能有空格):

sed -i '' 's/--.*//g' sr-api/*.sql

这个写法同时兼容GNU sed,改完后跨平台也能正常运行。

方案2:改用GNU sed替代BSD版本

如果更习惯GNU sed的语法逻辑,可以通过Homebrew安装:

brew install gnu-sed

安装后用gsed执行原命令:

gsed -i 's/--.*//g' sr-api/*.sql

也可以给gsed设置别名,直接用sed调用:

# zsh用户执行
echo 'alias sed=gsed' >> ~/.zshrc && source ~/.zshrc
# bash用户执行
echo 'alias sed=gsed' >> ~/.bashrc && source ~/.bashrc

额外说明

报错里的“unterminated substitute pattern”本质是BSD sed解析命令时,因-i选项格式不符合要求,误判了替换模式的边界,和目标文件是否包含注释无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:37:04