jq如何更新json文件中的某些值并将更改保存在同一文件中

jq如何更新json文件中的某些值并将更改保存在同一文件中,json,git,shell,file,jq,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更改

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

一种方法是:

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

您还可以在“moreutils”()中使用
海绵
。有关更多详细信息和选项,请参阅

顺便说一下,您可以压缩管道,以便只调用一次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
mv file.json file.tmp&file.json

这在Windows 10操作系统上可以使用吗?@Neo:如果您没有访问
海绵
的权限,那么JQ无需解析出我需要的JSON?