我有一个像这样的json字符串,
rssample='{ "Changes": [{"Action": "UPSERT","ResourceRecordSet": {"ResourceRecords":[{ "Value":""}], "Type": "TXT","NAME":"","TTL": 300}}]}'我想使用以下变量更新其中的名称和值。
name="testname"
newvalue="heritage=external-dns,external-dns/owner=us-east-1:sandbox-newtestowner,external-dns/resource=ingress/monitoring/prometheus-operator-alertmanager"所以我试着使用sed,
newrs=$(sed -E "s/"NAME":""/"NAME":"$name"/g" <<< "$rssample")
newrs1=$(sed -E "s/"Value":""/"Value":"\$newvalue"/g" <<< "$newrs")我期待下面的输出,
{ "Changes": [{"Action": "UPSERT","ResourceRecordSet": {"ResourceRecords":[{ "Value":"\"heritage=external-dns,external-dns/owner=us-east-1:sandbox-newtestowner,external-dns/resource=ingress/monitoring/prometheus-operator-alertmanager\""}], "Type": "TXT","NAME":"testname","TTL": 300}}]}但我是空的Name.And获取值为的错误,
sed: 1: "s/Value:/Value:"heritag ...": bad flag in substitute command: 'o'我的输出是,{ "Changes":[{"Action":"UPSERT","ResourceRecordSet":{"ResourceRecords":{ "Value":""},"Type":"TXT","NAME":"","TTL":300}}]}
请让我知道如何解决这个问题?使用sed是好主意还是jq?
发布于 2020-06-18 10:05:50
在编辑JSON时,使用支持JSON的工具通常比使用sed更安全,因此通常也更好。使用jq,一种可能性是:
jq --arg name "$name" --arg newvalue "$newvalue" '
.Changes[0].ResourceRecordSet |=
(.NAME=$name
| .ResourceRecords[0].Value = $newvalue)' <<< "$rssample"自由形式的方法
jq --arg name "$name" --arg newvalue "$newvalue" '
walk(if type == "object"
then if has("NAME") then .NAME=$name else . end
| if has("Value") then .Value = $newvalue else . end
else . end)' <<< "$rssample"https://stackoverflow.com/questions/62440381
复制相似问题