Sed
在 JSON 文件中的字元串匹配後添加新行
我需要幫助來完成以下任務。
在 JSON 文件中,我有一個類似下面的部分
"Principal": { "AWS": [ "arn:aws:iam::12345677890:root", "arn:aws:iam::12345677891:root",
我需要在哪裡找到一個字元串“AWS”:[並且它應該添加一個帶有“arn:aws:iam::33333333333:root”的新行,所以更新的json內容應該是這樣的。
"Principal": { "AWS": [ "arn:aws:iam::33333333333:root", "arn:aws:iam::12345677890:root", "arn:aws:iam::12345677891:root",
如何用 sed 做到這一點?
假設
Principal
是您的 JSON 文件中的頂級對象,並且您想要添加一些字元串,保存在 shell 變數entry
中,到下面的(開始)AWS
數組:entry='arn:aws:iam::33333333333:root' jq --arg e "$entry" '.Principal.AWS |= [$e,.[]]' file.json
該
jq
表達式將保存在jq
變數中的字元串添加到數組的開頭,$e
使用 分配--arg
到數組的開頭(它AWS
使用|=
新數組更新/重寫數組,從添加$e
的元素開始,然後是原始數組)。將元素添加到數組的末尾會稍微容易一些,並且可能更有效(因為不需要重寫整個數組),
jq --arg e "$entry" '.Principal.AWS += [$e]' file.json
測試:
$ cat file.json { "Principal": { "AWS": [ "arn:aws:iam::12345677890:root", "arn:aws:iam::12345677891:root" ] } }
$ entry='arn:aws:iam::33333333333:root' $ jq --arg e "$entry" '.Principal.AWS |= [$e,.[]]' file.json { "Principal": { "AWS": [ "arn:aws:iam::33333333333:root", "arn:aws:iam::12345677890:root", "arn:aws:iam::12345677891:root" ] } }
$ jq --arg e "$entry" '.Principal.AWS += [$e]' file.json { "Principal": { "AWS": [ "arn:aws:iam::12345677890:root", "arn:aws:iam::12345677891:root", "arn:aws:iam::33333333333:root" ] } }