[英]Combine sed commands into one command in bash script
我想改善这一行:
aws_iam_role=$(aws iam get-role --role-name rl-company-admin --profile=company-bill |
jq -r '.Role.AssumeRolePolicyDocument.Statement[].Principal.AWS' |
sed "s/arn:aws:iam::123456789101:user\///g" |
grep tdunphy |
sed 's/"//g'|
sed 's/,//g')
这是未经处理的命令的原始输出:
aws iam get-role --role-name rl-company-admin --profile=company-bill
{
"Role": {
"Description": "company Admin Role",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::123456789101:user/tdunphy",
"arn:aws:iam::123456789101:user/user1",
"arn:aws:iam::123456789101:user/user2",
"arn:aws:iam::123456789101:user/user3",
]
}
}
]
},
"MaxSessionDuration": 3600,
"RoleId": "AROAJGNAT3IXV7DIWSDCK",
"CreateDate": "2018-01-18T17:35:27Z",
"RoleName": "rl-company-admin",
"Path": "/",
"Arn": "arn:aws:iam::188087670762:role/rl-company-admin"
}
}
如何使用一个sed语句来处理此文本,而不是使用多个sed语句?
这样可以在单个jq
命令中完成,这样可以避免调用多个外部命令,例如grep
, sed
等:
aws iam get-role --role-name rl-company-admin --profile=company-bill |
jq --arg u 'tdunphy' -r '
.Role.AssumeRolePolicyDocument.Statement[].Principal.AWS[] |
select(. | endswith($u)) | sub("arn:aws:iam::123456789101:user/"; "")'
输出:
tdunphy
如果您确实愿意,这可以结合您所有sed
和grep
行的功能:
sed -n 's/arn:aws:iam::123456789101:user\///g; s/[,"]//g; /tdunphy/ {p}'
在旁观者看来,这是否算是一种改进。
更改对jq
的调用,使其看起来像这样,然后不必剥离其他字符:
jq -r '.Role.AssumeRolePolicyDocument.Statement[].Principal.AWS[]'
^^ Add these
您也可以尝试以下操作:
aws iam get-role --role-name rl-company-admin --profile=company-bill | \
jq -r '.Role.AssumeRolePolicyDocument.Statement[].Principal.AWS[] | split("/") | last' | \
grep tdunphy
这可能有点简洁,但是您可以通过一个jq
调用来完成所有操作:
jq -r '[.Role.AssumeRolePolicyDocument.Statement[].Principal.AWS[] | split("/") | last] | map(select(. == "tdunphy"))[]'
你可以做
sed 's/[,"]//g'
而不是两个sed(如果只是一个字)
更换
sed "s/arn:aws:iam::123456789101:user\///g" |
grep tdunphy |
sed 's/"//g'|
sed 's/,//g'
与
sed -n '/tdunphy/ {
s/arn:aws:iam::123456789101:user\///g
s/[,"]//g
p
'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.