我需要使用下面的 JSON 文件作为输入,并且该文件可以包含多个变量条目。我需要在环境变量中搜索var1
orvar2
并替换下面 JSON 中的值。
{
"var1": "valueplaceholder",
"var2": "valueplaceholder"
}
我尝试了下面的命令
cat input.json | sed "s/\"\([A-Z0-9_]*\)\":\s*\"\([A-Za-z0-9_]*\)\"/\"\1\": \"$\1\"/g"
但它会创建类似的输出
{
"var1": "$var1",
"var2": "$var2"
}
如何获取变量的值?即我需要$var1
代替 text的值$var1
。
答案1
给定
$ cat file.json
{ "var1": "valueplaceholder", "var2": "valueplaceholder", "var3": "valueplaceholder" }
然后,借用该with_entries
结构如何使用jq交换对象的键和值?并利用 jq 的$ENV
数组:
$ export var1="foo" var2="bar"
$ jq 'with_entries( .value = $ENV[.key] )' file.json
{
"var1": "foo",
"var2": "bar",
"var3": null
}
或者如果您想将不匹配的变量设置为空字符串或保留原始值
$ jq 'with_entries( .value = ($ENV[.key] // "") )' file.json
{
"var1": "foo",
"var2": "bar",
"var3": ""
}
或者
$ jq 'with_entries( .value = ($ENV[.key] // .value) )' file.json
{
"var1": "foo",
"var2": "bar",
"var3": "valueplaceholder"
}
或者,如果你想删除不存在的键
$ jq 'with_entries( .value = ($ENV[.key] // empty) )' file.json
{
"var1": "foo",
"var2": "bar"
}