jq如何更新json文件中的某些值并将更改保存在同一文件中
我有以下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更改
{
"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?