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

Mac下如何修复bash中sed对数字的匹配失效问题?

解决Mac系统下用sed替换JSON中mtime字段值为0的问题

正确命令示例

方法1:使用扩展正则表达式(推荐)

Mac自带的sed默认采用基础正则表达式(BRE),添加-E选项可启用扩展正则表达式(ERE),此时+能直接表示"匹配一个或多个连续字符":

echo "\"mtime\": 1234," | sed -E 's/"mtime": *[0-9]+/"mtime": 0/g'

输出结果:

"mtime": 0,

方法2:使用基础正则表达式语法

如果不想启用扩展正则,可在BRE标准语法中用\{1,\}替代+,实现"匹配一个或多个连续数字":

echo "\"mtime\": 1234," | sed 's/"mtime": *[0-9]\{1,\}/"mtime": 0/g'

为什么之前的尝试失败?

Mac的sed是BSD版本,和Linux上的GNU sed正则语法存在差异:

  • 直接写[0-9]+时,BRE会把+当作普通字符处理,无法匹配连续数字
  • 转义成[0-9]\+在部分BSD sed版本中不被支持,而\{1,\}是BRE中标准的"一个或多个"写法
  • 第一个命令仅匹配单个数字,因此只替换了开头的1为0,剩余数字未被处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:22:07