使用重定向运算符通过 jq 更新文件内容
Update contents of file via jq using redirection operator
我的JSON
输入文件如下:
{
"Name":"SA",
"Password":"yyyyy",
"Mappings" : {
"RegionMap" : {
"us-east-1" : { "AMI" : "xxxxxx" },
"us-east-2" : { "AMI" : "" },
"us-west-1" : { "AMI" : "" },
"us-west-2" : { "AMI" : "" },
"ca-central-1" : { "AMI" : "" },
"eu-central-1" : { "AMI" : "" },
"eu-west-1" : { "AMI" : "" },
"eu-west-2" : { "AMI" : "" },
"ap-south-1" : { "AMI" : "" },
"ap-southeast-1" : { "AMI" : "" },
"ap-southeast-2" : { "AMI" : "" },
"ap-northeast-1" : { "AMI" : "" },
"ap-northeast-2" : { "AMI" : "" },
"sa-east-1" : { "AMI" : "" }
}
}
}
我的任务是更新给定 json 文件中 us-east-1
的 AMI
键的值,并将更新后的文件创建为新文件。我正在使用 jq plugin with redirection operator. It has + 运算符,它可以用于 overwrite
对象中的内容。
我的 expected
输出是
{
"Name":"SA",
"Password":"yyyyy",
"Mappings" : {
"RegionMap" : {
"us-east-1" : { "AMI" : "abcd" },
"us-east-2" : { "AMI" : "" },
"us-west-1" : { "AMI" : "" },
"us-west-2" : { "AMI" : "" },
"ca-central-1" : { "AMI" : "" },
"eu-central-1" : { "AMI" : "" },
"eu-west-1" : { "AMI" : "" },
"eu-west-2" : { "AMI" : "" },
"ap-south-1" : { "AMI" : "" },
"ap-southeast-1" : { "AMI" : "" },
"ap-southeast-2" : { "AMI" : "" },
"ap-northeast-1" : { "AMI" : "" },
"ap-northeast-2" : { "AMI" : "" },
"sa-east-1" : { "AMI" : "" }
}
}
}
我当前的命令没有提供预期的输出,如下所示:
jq '.Mappings.RegionMap + { "us-east-1":{"AMI":"abcd"}}'
<OldfileName> > <Newfilename>
有人可以帮助我使用重定向运算符实现预期的输出吗?
我是 运行 cygwin
环境中的命令,我的 jq 版本是 1.5
.
编辑
在密码键后添加了一个逗号
使您的输入 json 无效的第一个问题是这一行(第 3 行):
...
"Password":"yyyyy" <----
...
后面应该跟,
。
修复后,您可以轻松更新所需的 属性 值:
jq '.Mappings.RegionMap["us-east-1"].AMI = "abcd"' oldfile > newfile
newfile
内容:
{
"Name": "SA",
"Password": "yyyyy",
"Mappings": {
"RegionMap": {
"us-east-1": {
"AMI": "abcd"
},
"us-east-2": {
"AMI": ""
},
"us-west-1": {
"AMI": ""
},
"us-west-2": {
"AMI": ""
},
"ca-central-1": {
"AMI": ""
},
"eu-central-1": {
"AMI": ""
},
"eu-west-1": {
"AMI": ""
},
"eu-west-2": {
"AMI": ""
},
"ap-south-1": {
"AMI": ""
},
"ap-southeast-1": {
"AMI": ""
},
"ap-southeast-2": {
"AMI": ""
},
"ap-northeast-1": {
"AMI": ""
},
"ap-northeast-2": {
"AMI": ""
},
"sa-east-1": {
"AMI": ""
}
}
}
}
我的JSON
输入文件如下:
{
"Name":"SA",
"Password":"yyyyy",
"Mappings" : {
"RegionMap" : {
"us-east-1" : { "AMI" : "xxxxxx" },
"us-east-2" : { "AMI" : "" },
"us-west-1" : { "AMI" : "" },
"us-west-2" : { "AMI" : "" },
"ca-central-1" : { "AMI" : "" },
"eu-central-1" : { "AMI" : "" },
"eu-west-1" : { "AMI" : "" },
"eu-west-2" : { "AMI" : "" },
"ap-south-1" : { "AMI" : "" },
"ap-southeast-1" : { "AMI" : "" },
"ap-southeast-2" : { "AMI" : "" },
"ap-northeast-1" : { "AMI" : "" },
"ap-northeast-2" : { "AMI" : "" },
"sa-east-1" : { "AMI" : "" }
}
}
}
我的任务是更新给定 json 文件中 us-east-1
的 AMI
键的值,并将更新后的文件创建为新文件。我正在使用 jq plugin with redirection operator. It has + 运算符,它可以用于 overwrite
对象中的内容。
我的 expected
输出是
{
"Name":"SA",
"Password":"yyyyy",
"Mappings" : {
"RegionMap" : {
"us-east-1" : { "AMI" : "abcd" },
"us-east-2" : { "AMI" : "" },
"us-west-1" : { "AMI" : "" },
"us-west-2" : { "AMI" : "" },
"ca-central-1" : { "AMI" : "" },
"eu-central-1" : { "AMI" : "" },
"eu-west-1" : { "AMI" : "" },
"eu-west-2" : { "AMI" : "" },
"ap-south-1" : { "AMI" : "" },
"ap-southeast-1" : { "AMI" : "" },
"ap-southeast-2" : { "AMI" : "" },
"ap-northeast-1" : { "AMI" : "" },
"ap-northeast-2" : { "AMI" : "" },
"sa-east-1" : { "AMI" : "" }
}
}
}
我当前的命令没有提供预期的输出,如下所示:
jq '.Mappings.RegionMap + { "us-east-1":{"AMI":"abcd"}}'
<OldfileName> > <Newfilename>
有人可以帮助我使用重定向运算符实现预期的输出吗?
我是 运行 cygwin
环境中的命令,我的 jq 版本是 1.5
.
编辑
在密码键后添加了一个逗号
使您的输入 json 无效的第一个问题是这一行(第 3 行):
...
"Password":"yyyyy" <----
...
后面应该跟,
。
修复后,您可以轻松更新所需的 属性 值:
jq '.Mappings.RegionMap["us-east-1"].AMI = "abcd"' oldfile > newfile
newfile
内容:
{
"Name": "SA",
"Password": "yyyyy",
"Mappings": {
"RegionMap": {
"us-east-1": {
"AMI": "abcd"
},
"us-east-2": {
"AMI": ""
},
"us-west-1": {
"AMI": ""
},
"us-west-2": {
"AMI": ""
},
"ca-central-1": {
"AMI": ""
},
"eu-central-1": {
"AMI": ""
},
"eu-west-1": {
"AMI": ""
},
"eu-west-2": {
"AMI": ""
},
"ap-south-1": {
"AMI": ""
},
"ap-southeast-1": {
"AMI": ""
},
"ap-southeast-2": {
"AMI": ""
},
"ap-northeast-1": {
"AMI": ""
},
"ap-northeast-2": {
"AMI": ""
},
"sa-east-1": {
"AMI": ""
}
}
}
}