我正在使用" sed"命令替换文件中的行。当替换行是直接文本时它很有效,但是当我替换它时,会添加$ variable额外的标签。
# Find Resource ID
FIND_ID=$(
aws iam get-account-authorization-details | grep -m1 saml-provider
)
echo ${FIND_ID}
sleep 3
# Update file with the new resource ID
# Use | instead of / or : since the ID contains both symbols
sed -i '.bak' "7s|.*|$FIND_ID|" test-policy.json
test-policy.json:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::xxxxxxxx:saml-provider/????" }, "Action": "sts:AssumeRoleWithSAML", "Condition": { "StringEquals": { "SAML:aud": "signin.aws.amazon.com/saml"; } } } ] }
有什么想法吗?
谢谢。
答案 0 :(得分:0)
谢谢大家的回复。
@ user3159253 - 之前我按照你的建议使用了引号,但没有对标签产生影响所以我把它们放回去了。
@Gordon Davisson - 它没有按预期工作,但它给了我一个想法,当我正在进行描述调用时删除选项卡
@Etan Reisner - 没有尝试过你的建议,我还在学习
这是使用带有选项-e:
的sed命令的解决方案# Find Resource ID, and strip leading spaces and tabs
FIND_ID=$(
aws iam get-account-authorization-details | grep -m1 saml-provider | sed -e 's/^[ \t]*//'
)
echo ${FIND_ID}
# Use sed to insert the new line
sed -i '.bak' '7s|"Federated".*|'"${FIND_ID}"'|g' test-policy.json
# For testing only to confirm the change
sed '7q;d' test-policy.json