如何更新json文件中的某些值并通过jq保存对同一文件的更改

时间:2018-05-17 14:25:03

标签: json git shell file jq

我有以下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,因为我以后需要使用同一个文件?

2 个答案:

答案 0 :(得分:1)

您还可以在“moreutils”(https://joeyh.name/code/moreutils/)中使用sponge。有关详细信息和选项,请参阅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

答案 1 :(得分:0)

一种方法是:

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