我有这样文件(精确格式):
{ "test": "10" }
{ "games": "30" }
{ "REPOSITORY": "5"}
我想更新key的值。例如games为66。所以新文件将是:
{ "test": "10" }
{ "games": "66" }
{ "REPOSITORY":"5"}
我使用了jq和临时文件的组合。
tmp=$(mktemp);
jq '.games = "66"' pair.json > "$tmp" && mv "$tmp" change.json
却得到了这样的输出。
{
"test": "10",
"games": "66"
}
{
"games": "66"
}
{
"REPOSITORY": "5",
"games": "66"
}
其中游戏是写所有3而我只是希望它被更新只在其位置。此外,我希望值被更新使用bash变量,但我可以尝试找出使用--arg后,我解决了这个问题。请协助这里。
2条答案
按热度按时间xienkqul1#
您的输入是一个对象流。因此,您的筛选表达式
.games = "66"
Assert记录games
存在于流中的每个对象中。若要单独更新特定对象,请先选取它,然后指定所需的值或更新它。
要回答OP关于如何对变量执行相同操作的说明,请执行以下操作
py49o6xq2#
一个简单的解决方案是使用带有赋值的
select
。如果条件不匹配,select将返回特殊值empty
,如果匹配,则返回输入值。jq -c
以生成紧凑格式,即每行一个JSON对象/文档。要处理任意名称,请稍微更改语法:
并与通过CLI传递的参数一起使用: