bash:sed在使用变量时添加制表符空间

时间:2016-05-17 22:34:14

标签: bash macos sed

我正在使用" 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"; } } } ] }

有什么想法吗?

谢谢。

1 个答案:

答案 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