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

如何在Bash中动态替换package.json文件里的版本号

当然要用正则!这正是正则表达式的拿手场景

因为你没法预知原来的版本号,所以得用正则来匹配任意符合语义化版本规范的字符串,不管它是1.0.0、12.3.45还是3.2.1-beta.7,都能精准替换成你想要的新版本。

我给你分两种场景提供解决方案:

1. 基础场景:仅替换标准x.y.z格式的版本

如果你的项目只用纯数字的三段式版本(比如5.0.0、1.2.3),用这个sed命令就够了:

sed -i "s/\"version\": \"[0-9]\+\.[0-9]\+\.[0-9]\+\"/\"version\": \"5.1.1\"/g" package.json

正则解释:

  • [0-9]\+:匹配一个或多个数字(加号在sed里要转义成\+)
  • \.:匹配版本号里的点(点在正则里是通配符,必须转义才能匹配真实的点)
  • 整个正则会精准匹配"version": "x.y.z"这种格式的行,替换成你指定的新版本。

2. 进阶场景:支持带预发布标签的版本

如果你的版本号有预发布后缀(比如5.0.0-beta.1、2.1.0-rc.3),把正则扩展一下就能覆盖:

sed -i "s/\"version\": \"[0-9]\+\.[0-9]\+\.[0-9]\+\(-[a-zA-Z0-9.]\+\)\?\"/\"version\": \"5.1.1\"/g" package.json

新增部分解释:

  • \(-[a-zA-Z0-9.]\+\)\?:匹配可选的预发布标签,比如-beta.1,其中\?表示这部分可以有也可以没有。

更稳妥的方案:用jq处理JSON(推荐)

sed是文本处理工具,万一你的package.json里version字段有特殊格式(比如换行、额外空格、注释),sed可能匹配出错。而jq是专门处理JSON的工具,能直接操作JSON结构,绝对不会破坏文件格式:

jq '.version = "5.1.1"' package.json > temp.json && mv temp.json package.json

这个命令直接定位到根节点的version字段,把它的值改成5.1.1,不管原来的版本是什么格式都能搞定。

注意事项

  • macOS的sed和Linux的sed语法略有不同:macOS下-i参数需要加空字符串,比如sed -i "" "s/..." package.json,Linux则不用。
  • 如果用jq,需要先安装它(比如brew install jq或者apt install jq)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:32:33