【问题标题】:How to update some values in a json file and save changes in the same file by jq [duplicate]如何更新json文件中的某些值并通过jq将更改保存在同一文件中[重复]
【发布时间】:2018-10-27 20:52:38
【问题描述】:

我有以下 json 文件:

{
  "src": "ssh://git@bitbucket.org/myrepos/project",
  "version": "master",
  "archetype_version": "master",
  "roles": [
    {
      "src": "ssh://git@bitbucket.org/myrepos/project",
      "version": "master"
    }
  ]
}

我想将版本从master更改为另一个,所以我执行以下命令:

 cat file.json | jq '.roles[0].version = "new"' | jq '.version = "new"' | jq '.archetype_version = "new"' > file2.json

如何将更改保存到file.json 而不是file2.json,因为我以后需要使用同一个文件?

【问题讨论】:

    标签: json git shell file jq


    【解决方案1】:

    您也可以在“moreutils”中使用sponge (https://joeyh.name/code/moreutils/)。有关更多详细信息和选项,请参阅jq FAQ

    顺便说一句,您可以压缩您的管道,以便只调用一次 jq 而没有调用 cat

    < file.json jq '
    .roles[0].version = "new"
    | .version = "new"
    | .archetype_version = "new"' | sponge file.json
    

    当然,在不先备份输入文件的情况下覆盖输入文件通常会带来一些风险,因此在许多方面,最好采用以下两步过程:

    mv file.json file.tmp && < file.tmp jq .... > file.json
    

    【讨论】:

    【解决方案2】:

    一种方法是:

    ..file1.json|..|..|.. >file2.json && mv file2.json file1.json
    

    【讨论】:

      猜你喜欢
      • 2012-05-27
      • 1970-01-01
      • 2019-03-11
      • 2021-07-27
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      相关资源
      最近更新 更多