エンジニャーリング

技術ときどきネコ

sedにはまる

CodeDeployを使っていてhookで動くシェルの中で設定ファイルを作っているところがあるのだが、production環境を設置してみたところ、sedで変な置き換わり方してた。
staging環境では起こらないのに・・・

例えば・・・

DATABASE_URL="mysql://userA:passwordA@localhost:3306/sample"
 ↓
DATABASE_URL="mysql://userB:passwordB@[mysqlのエンドポイント]:3306/sample"

のように変えたいところがこのようなことになっていた。

DATABASE_URL="mysql://user:passDATABASE_URL="mysql://user:password@localhost:3306/sample"word@[mysqlのエンドポイント]:3306/sample"

なぜゆえに?

どうもpassとwordの間に何かがあると思い、元のパスワードを確認すると & が入ってる!!!
pass&wordのところの & がどうやら元の文字列に置き換わってしまったらしい。
これはsedコマンドの使い方の問題っぽいから調べてみたところこのような記載が。

置換後の文字列に & を指定するとマッチした文字列の部分が出力され、
, ... を指定するとマッチした文字列のうち正規表現内でカッコでグルーピングされた部分が出力される。

ちなみに & をそのまま使うようなやり方もないので、仕方なくパスワードから & を外すことにした。
& がなければ無事に置換することができました。
パスワードに記号使うのも考えものだな。