[英]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.