次の作業に助けが必要です。
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を使用してこれを行うにはどうすればよいですか?
ベストアンサー1
Principal
あなたがJSONドキュメントの最上位オブジェクトであり、シェル変数に格納されているいくつかの文字列を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"
]
}
}