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