插入AWS API凭据的脚本

时间:2016-09-26 09:45:09

标签: bash sed

我正在尝试编写一个脚本以在awscreds.template中插入API凭据。但是,秘密包含特殊字符。 举个例子:

AWSAccessKeyId=AKIAJ5YhzvVUZnPTBVRA
AWSSecretKey=fRUZnUVUZnUvYhzvJVpwyn/xN3Oo0l3icqRy0//+

我的脚本请求:

echo "Entre the Access Key, followed by an ENTER:"
read access
echo "Entre the Secret Key, followed by an ENTER:"
read secret

然后将其插入文件中:

sed -i '/AWSAccessKeyId=/s/$/'$access'/' awscreds.template

sed -i '/AWSSecretKey=/s/$/'$secret'/' awscreds.template

但是,当我运行脚本时,我得到以下内容:

sed: -e expression #1, char 44: unknown option to `s'

在做了一些研究之后,我确保使用' ' 来限制输入,但我仍然得到相同的警报。但为什么我仍然会收到此错误?

3 个答案:

答案 0 :(得分:2)

AWSSecretKey值包含/字符,用作sed命令中的分隔符。

尝试将sed子句分隔符替换为另一个字符。

例如:

sed -i '/AWSAccessKeyId=/s~$~'"$access"'~' awscreds.template
sed -i '/AWSSecretKey=/s~$~'"$secret"'~' awscreds.template

答案 1 :(得分:1)

你需要使用awk来强有力地执行此操作,因为sed无法对任意字符串进行操作。这适用于输入文件或替换文本中的任何字符串:

$ secret='a&b/\t=\1' awk '/^AWSSecretKey=/ { sub(/=.*/,"="); $0=$0 ENVIRON["secret"] } 1' file
AWSSecretKey=a&b/\t=\1

答案 2 :(得分:0)

问题是 sed 的转移者。凭证包含 / ,它也在 sed 语句中使用。所以我最终只是将凭证回显到文件中。我知道这不是最优雅的方式。但它运作良好。

 echo "AWSAccessKeyId=$access" > awscreds.template
 echo "AWSSecretKey=$secret" >> awscreds.template 
相关问题