簡體   English   中英

在JSON文件中使用sed替換內容

[英]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-1AMI密鑰的值。 我已經用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上提到了與此相關的許多問題,但是我無法獲得所需的輸出。 問題的鏈接如下

  1. 使用命令在文件中查找和替換文本

  2. 使用sed或awk查找並替換JSON

  3. 如何使用sed替換json文件中的鍵值

  4. 使用Sed查找和替換json字段

  5. 在運行時替換json中的值

有人可以幫我嗎? 還有可能我可以使用環境變量值來替換文件中的內容嗎? 如果是這樣,怎么辦?

編輯

我已經使用jq得到了答案。 上面提到了鏈接。 由於jq在Windows服務器計算機上不穩定,因此我嘗試使用sed命令實現相同的目標。

這可能只是我的香皂盒,但sed 到位修改文件。 --in-place GNU-SID的選擇完全是名不副實的,因為它修改文件,而是創建一個新的。 如果要編輯文件,請使用ed seded的流版本)。 現在,同樣需要注意的是,使用edsed編輯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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM