かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

sed 置換の正規表現内で変数を使いたい

docker で環境を作っていて docker compose build 時に設定ファイルに環境変数から取得した値を自動で設定したかった。ファイルの変更は sed コマンドを使えば良さそうだったので置換の正規表現環境変数を展開して置換できれば良さそうです。

変数を使う場合は正規表現" (ダブルコーテーション) で囲う必要がある

" (ダブルコーテーション) は変数展開がされるが、' (シングルコーテーション) だと変数名そのものが正規表現に埋め込まれれしまう。

$ THEME_NAME=soleil
$ echo '/path/to/theme/' |
  sed -e "s/\/path\/to\/theme\//\/path\/to\/$THEME_NAME\//g"
/path/to/soleil/

# シングルコーテーションだと変数名のまま置換されてしまう
$ echo '/path/to/theme/' | 
  sed -e 's/\/path\/to\/theme\//\/path\/to\/$THEME_NAME\//g'
/path/to/$THEME_NAME/

ファイル内の置換

ファイル内の置換を行う場合も同じ

.env

THEME=/path/to/your theme/

変数 docker-compose.yml

services:
  app:
    environment:
      THEME_NAME: soleil
    command: sh init.sh

コマンド init.sh

sed -i -e "s/\/path\/to\/your theme\//\/path\/to\/$THEME_NAME\//g" .env

👇 実行後 .env

THEME=/path/to/soleil/

₍ ᐢ. ̫ .ᐢ ₎👌 できた


[参考]

アイカツ…みて…