tr5*_*r53 4 perl sed bash-scripting
如何"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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
后
{
"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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
不要尝试使用标准文本处理工具(如 )解析 JSON 文本awk
,sed
或者不使用 中的 JSON 模块perl
,因为它们不支持 JSON 语法。jq
是一个轻量级的 JSON 处理器,允许您即时操作内容。
例如,您的要求可以简单地写为
jq --arg new "arn:aws:iam::xxxxxxx:role/3" '.Statement[].Principal.AWS? += [$new]' json
Run Code Online (Sandbox Code Playgroud)
如果要追加的元素不止一个,则将 arg 创建为 JSON blob
jq --argjson new '["arn:aws:iam::xxxxxxx:role/3", "arn:aws:iam::xxxxxxx:role/4"]' '.Statement[].Principal.AWS? += $new'
Run Code Online (Sandbox Code Playgroud)
下载和使用该工具的说明位于jq 手册中的下载 jq和使用教程
如果内容在文件中并且您想永久修改此文件,请使用就地编辑工具,例如sponge
可以从 GNU moreutils 包中获得的工具,您可以这样做
jq --arg new "arn:aws:iam::xxxxxxx:role/3" '.Statement[].Principal.AWS? += [$new]' json | sponge json
Run Code Online (Sandbox Code Playgroud)
或使用 POSIX 工具,如 mktemp
temp="$(mktemp)"
jq --arg new "arn:aws:iam::xxxxxxx:role/3" '.Statement[].Principal.AWS? += [$new]' json > "$temp" && mv "$temp" json
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2824 次 |
最近记录: |