[英]Replace Content in place using sed in a JSON file
我的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" : "" }
}
}
}
我的task
是在给定的json
文件中更新us-east-1
的AMI
密钥的值。 我已经用jq解决了这个问题。 这是链接 。 我在windows
服务器计算机上无法稳定jq的问题。 所以现在我想使用sed
命令获得相同的结果。
我的expected output
如下
{
"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" : "" }
}
}
}
我已经在与此问题相关的stackoverflow
上提到了与此相关的许多问题,但是我无法获得所需的输出。 问题的链接如下
有人可以帮我吗? 还有可能我可以使用环境变量值来替换文件中的内容吗? 如果是这样,怎么办?
编辑
我已经使用jq得到了答案。 上面提到了链接。 由于jq在Windows服务器计算机上不稳定,因此我尝试使用sed命令实现相同的目标。
这可能只是我的香皂盒,但sed
不到位修改文件。 该--in-place
GNU-SID的选择完全是名不副实的,因为它不修改文件,而是创建一个新的。 如果要编辑文件,请使用ed
。 ( sed
是ed
的流版本)。 现在,同样需要注意的是,使用ed
或sed
编辑json数据是一个坏主意,您可以尝试以下(非健壮)解决方案:
printf '/us-east-1/s/: ".*"/: "abcd"/\nw\nq\n' | ed input
(这适用于您的输入,但是依赖于:
和"
之间的空格,因此很脆弱。)
在sed中实现它的一种简单方法是创建以下sed文件
/AMI/ {
/us-east-1/ {
s/"AMI".*/"AMI" : "abcd" },/
}
}
然后像这样执行
sed -f <above_file.sed> <json file>
如果xxxxxx
是文件中的实际文本,并且您想替换它,请使用以下命令:
/AMI/ {
/us-east-1/ {
s/xxxxxx/abcd/
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.