Ich verwende den Befehl "sed", um eine Zeile in einer Datei zu ersetzen. Es funktioniert gut, wenn die Ersatzzeile ein direkter Text ist, aber sobald ich es ersetze, werden $ variable extra Tabs hinzugefügt.bash: sed fügt bei Verwendung einer Variablen einen Tabulatorraum hinzu
# 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"; } } } ] }
Irgendwelche Gedanken?
Vielen Dank.
Test-policy.json: { "Version": "2012.10.17", "Statement": [ { "Effekt": "Zulassen", "Principal": { "Federated": "arn: aws: iam :: xxxxxxxx: saml-provider/????" }, "Aktion": "sts: AssumeRoleWithSAML", "Bedingung": { "StringEquals": { "SAML: Aud": "https://signin.aws.amazon.com/saml" } } } ] } – buldozer
Ich würde vorschlagen, 'echo' '$ {FIND_ID}' "' zu zitieren. So sehen Sie, was genau $ FIND_ID ist. – user3159253
Verwenden Sie 'echo" $ FIND_ID "|, um eine noch klarere Darstellung der Variablen zu erhalten cat -vet - die doppelten Anführungszeichen verhindern, dass es mit Leerzeichen verwechselt wird (z. B. wenn Tabs in Leerzeichen umgewandelt werden) und das "cat -vet" verwandelt nicht druckbare Zeichen (wie Tabulatoren) in explizite Steuerzeichenfolgen (Registerkarte wird in^I konvertiert '). –