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

使用sed替换package.json文件中的版本号,json,sed,Json,Sed,这是my package.json文件的一部分 { "name": "org-team-module", "version": "1.1.0-snapshot", "description": "Some description", "scripts": { "start": "n

这是my 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-snapshot

这就是我现在所拥有的

sed -nE -i 's/(^\s*"version": ")(.*?)(",$)/\11.2.0-snapshot\3/p' test.json
但是,当我添加-I标志以替换时;整个文件将替换为搜索的值。 i、 e.替换后的整个文件内容为

        "version": "1.2.0-snapshot",

如何替换文件中的特定行

sed
不适合处理JSON文件;如果
“version”
及其值不在同一行(这不是常见情况,但肯定是有效的JSON),脚本将失败

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

version
的值替换为固定值非常简单:

jq'.version=“1.2.0-snapshot”'package.json
它不会修改原始文件,但会在屏幕上转储修改后的JSON。脚本可以将其输出重定向到临时文件,然后将临时文件移到原始文件上,如下所示:

jq'.version=“1.2.0-snapshot”'package.json>package.json.new
mv package.json.new package.json

我建议简单地将参数更改为
-E-I
并删除
/p
,例如
sed-E-I的/(^\s*“version”)(.*?(,$)/\11.2.0-snapshot\3/'test。json
sed
不适合处理json文件;如果
“version”
及其值不在同一行(这不是常见情况,但肯定是有效的JSON),脚本将失败。我建议改用。它知道如何解析和生成JSON,脚本变得更小、更清晰。