2016-05-17 5 views
0

"sed"コマンドを使ってファイル内の行を置き換えている。置換行が直接テキストである場合はうまく動作しますが、置換すると$ variableの余分なタブが追加されます。bash:変数を使うときにsedを追加する。

# 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 

テスト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

# 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 
試験policy.json:{ "バージョン": "2012年10月17日"、 "文":[ { "効果": "許可"、 "プリンシパル":{ "連合": "arn:aws:iam :: xxxxxxxx:saml-provider/????" }、 "アクション": "STS:AssumeRoleWithSAML"、 "条件":{ "StringEquals":{ "SAML:AUD": "https://signin.aws.amazon.com/saml" } } } } – buldozer

+0

私は 'echo" $ {FIND_ID} "を引用することをお勧めします。したがって、あなたはexacltly $ FIND_IDが何であるかを見るでしょう。 – user3159253

+5

変数の内容をさらに明確に表示するには、 'echo" $ FIND_ID "| 'cat -vet'は、空白で邪魔しないようにする(例えば、タブを空白に変えるなど)、' cat -vet'は印字されない文字(タブなど)を明示的な制御文字列に変換します(タブは '^ I ')。 –

答えて

0

ありがとうございました。

@ user3159253 - 以前は私が示唆したように引用符を使用しましたが、タブとの違いはありませんでした。あなたの提案を試していない私はまだ学んでいます、 -

@Gordon Davissonは - 私はコール

@Etanライスナーを記述やっているとき、期待どおりに動作しませんでしたが、それは私の右のタブを削除する考えを与えましたここ

は、オプション-eとsedコマンドを利用して解決する:

関連する問題