使用jq在json中增加一个数值



我有一个json,它看起来像这样:-

{
"name": "abc",
"version": "20.02.01",
"tag": "24",
"abc_version": "20.02",
"registry": "registry.abc.com",
"vendor": "greenplanet",
"apps": [
{
"name": "abc-app",
"version": "20.02.01-16",
"volumes": [
"/dev/log:/dev/log"
],
"max_instances": "1"
},
{
"name": "xyz-app",
"version": "2.0.0-2",
"volumes": [
"/dev/log:/dev/log"
],
"max_instances": "1"
}      
]
}

基于一个条件,我需要增加abc应用程序或xyz应用程序的版本。目前在";2016年2月20日";对于abc应用程序,我需要将其更改为";2017年2月20日";。此外,我需要增加父应用程序的标签;abc";至";25〃;我可以用sed增加版本,但这对我来说不起作用:-

./jq -r ".apps" version.json | ./jq -r ".[] | .version" | grep -v '1.0.2' |sed -r 's/([0-9]+.[0-9]+.[0-9]+)(.*)([0-9]+)/echo "12$((3+1))"/e'

我需要在json中增加所有上述条件,或者可能添加到一个临时文件中,我可以将其移动到原始文件中。

提前谢谢。

首先,让我们定义一个助手函数来执行增量:

# return a string
def inc:
(capture("(?<pre>.*)-(?<post>[0-9]+$)") | "(.pre)-( (.post|tonumber) + 1 )")
// "(tonumber+1)" ;

解决方案的其余部分现在可以写在两行中,每增加一个值一行:

.tag |= inc
| .apps |= map(if .name == "abc-app" then .version |= inc else . end)

就地编辑

您可以使用sponge,或者临时文件,或者。。。(参见例如。"How can "in-place" editing of a JSON file be accomplished?"jq的常见问题解答(。

相关内容

  • 没有找到相关文章

最新更新