以下を返すawsコマンドがあります。
{
"Parameter": {
"Name": "/mysite/development/mongodb_uri",
"Type": "SecureString",
"Value": "mongodb+srv://administrator:[email protected]/mysite_development?retryWrites=true&w=majority",
"Version": 4
}
}
awkでパイプして&シンボルをエスケープしたいです。
aws | awk '/Value/ { gsub(/[\",\"]/,\"\",\$2); gsub(/[\"&\"]/,\"\\\\&\",\$2); print \$2}'
結果は次のとおりです。
mongodb+srv://administrator:[email protected]/mysite_development?retryWrites=true&w=majority
ただし、&記号はエスケープされません。結果文字列に「\&」が表示されることが予想されます。このawkコマンドは、evalに渡されたシェルスクリプトの変数に保存されます。
AWS_COMMAND="aws ssm --region us-east-2 --with-decryption get-parameter --name"
AWK_COMMAND="awk '/Value/ { gsub(/[\",\"]/,\"\",\$2); gsub(/[\"&\"]/,\"\\\\&\",\$2); print \$2}'"
FETCH_AWS_SSM () {
eval "$AWS_COMMAND /$APPLICATION/$DEPLOYMENT_GROUP_NAME/$1 | $AWK_COMMAND"
}
MONGODB_URI=$(FETCH_AWS_SSM "mongodb_uri")
echo MONGODB_URI
この文字通りのバックスラッシュをどのように取得できますか?
ベストアンサー1
JSONを使用している場合は、そのために特別に設計されたツールを使用してください。jq
:
$ aws | jq -r '.Parameter.Value | gsub("&";"\\&")'
mongodb+srv://administrator:[email protected]/mysite_development?retryWrites=true\&w=majority