_"arn:aws:iam::xxxxxxx:role/3"
_の下に_"arn:aws:iam::xxxxxxx:role/2"
_行を追加するにはどうすればよいですか__"arn:aws:iam::xxxxxxx:role/2"
_の後にコンマを追加します。
前:
_{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
},
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::xxxxxxx:role/1",
"arn:aws:iam::xxxxxxx:role/2"
]
},
"Action": "sts:AssumeRole"
}
]
}
_
後
_{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
},
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::xxxxxxx:role/1",
"arn:aws:iam::xxxxxxx:role/2",
"arn:aws:iam::xxxxxxx:role/3"
]
},
"Action": "sts:AssumeRole"
}
]
}
_
awk
、sed
などの標準のテキスト処理ツールを使用して、またはPerl
にJSONモジュールを使用せずにJSONテキストを解析しようとしないでください。 jq
は、コンテンツをその場で操作できる軽量のJSONプロセッサです。
たとえばあなたの要件は単に次のように書くことができます
jq --arg new "arn:aws:iam::xxxxxxx:role/3" '.Statement[].Principal.AWS? += [$new]' json
追加する要素が複数ある場合は、JSON BLOBとして引数を作成します
jq --argjson new '["arn:aws:iam::xxxxxxx:role/3", "arn:aws:iam::xxxxxxx:role/4"]' '.Statement[].Principal.AWS? += $new'
ツールのダウンロードと使用の手順は Download jq にあり、使用方法のチュートリアルは jq Manual にあります。
内容がファイル内にあり、このファイルを永続的に変更する場合は、sponge
などのインプレース編集ツールを使用して、GNU moreutilsパッケージから入手できます。
jq --arg new "arn:aws:iam::xxxxxxx:role/3" '.Statement[].Principal.AWS? += [$new]' json | sponge json
またはmktemp
のようなPOSIXツールを使用します
temp="$(mktemp)"
jq --arg new "arn:aws:iam::xxxxxxx:role/3" '.Statement[].Principal.AWS? += [$new]' json > "$temp" && mv "$temp" json