使用sed替换package.json文件中的版本号



这是我的package.json文件的一部分

{
"name": "org-team-module",
"version": "1.1.0-snapshot",
"description": "Some description",
"scripts": {
"start": "npm run build && npm run copy-static-assets && npm run serve",
"build": "rimraf dist && npx tsc && echo npm run lint",

我想用一个特定的值来替换版本,比如1.2.0-快照

这就是我现在所拥有的;

sed -nE -i 's/(^s*"version": ")(.*?)(",$)/11.2.0-snapshot3/p' test.json

但是,当我添加-I标志来替换;整个文件将替换为搜索到的值。即替换后的整个文件内容是

"version": "1.2.0-snapshot",

我如何才能替换文件中的特定行

sed不适合处理JSON文件;如果"version"和它的值不在同一行(这不是常见的情况,但肯定是有效的JSON(,您的脚本将失败。

我建议改用jq。它知道如何解析和生成JSON,脚本变得更小、更清晰。

用固定值替换version的值很简单,如下所示:

jq '.version="1.2.0-snapshot"' package.json

它不修改原始文件,而是将修改后的JSON转储到屏幕上。您的脚本可以将其输出重定向到一个临时文件,然后将临时文件移到原始文件上,如下所示:

jq '.version="1.2.0-snapshot"' package.json > /tmp/package.json
mv /tmp/package.json package.json

最新更新