チーム作業してると開発が進むにつれて追加や変更が頻発する環境変数の扱いが悩ましいです。
.env.sample
のようなキーだけ書かれたファイルを git 管理することが多いのですが、これをリネームする際にファイルに書かれている内容をゴニョゴニョしたい事があったのでメモ
CONS cp
でコピーはコピーするだけ
$ cp .env.sample .env
.env.sample
を .env
というファイル名でコピー。コピーなので内容の変更はできない
sed
でファイルの中身を変更したり削除したりできる
sed -e 処理内容
でファイルの変更ができ、-e
区切りで処理を連続して行うことができる
sed -e 's/xxx/ZZZ/g'
...xxx
を全てZZZ
に置き換えるsed -e 1,3d
… 1行目〜3行目までを削除sed -e 's/xxx/ZZZ/g' -e '/^$/d
…xxx
を全てZZZ
に置き換えて、空行を削除する
e.g.
下記のような .env.sample
があり、1〜2行目を削除して http://localhost:4000
を https://my-api.com
に置換、空行を削除して .env
として出力したい
# コメントです HOST=http://localhost:3000 API=http://localhost:4000 API_FOR_ADMIN=http://localhost:4000/admin # Token を取得して設定してください SECRET_TOKEN=
👇
$ cat .env.sample | sed -e 1,2d -e 's/http:\/\/localhost:4000/https:\/\/my-api.com/g' -e '/^$/d' > .env
👇
.env
HOST=http://localhost:3000 API=https://my-api.com API_FOR_ADMIN=https://my-api.com/admin # Token を取得して設定してください SECRET_TOKEN=
₍ ᐢ. ̫ .ᐢ ₎ すごい!
📝 sed での空白行とコメント行の削除
よく使いそうなので
- 空白行の削除 …
sed -e '/^\s*$/d'
#
から始まるコメント行の削除 …sed -e '/^\s*#/d'
空白行とコメント行をまとめて削除
$ sed -e '/^\s*$/d' -e '/^\s*#/d'
正規表現は自信がないけど
- 空白行の削除
/^\s*$/d
の^\s*
は先頭に空白がいくらあってもで$
が行末なので、空白だけの行にマッチ。最後のd
が sed の削除コマンド - コメント行の削除
/^\s*#/d
は^\s*
で行頭のスペースを許容して#
なので#
から始まるコメント行にマッチ。最後のd
が sed の削除コマンド
grep -v
を使ってもコメント行を削除できる
grep -v
… マッチした箇所を除外
e.g. .env.sample
の #
から始まるコメント行と空白行を削除して .env
として出力
$ cat .env.sample | grep -v -e '^\s*#' -e '^\s*$' > .env
₍ ᐢ. ̫ .ᐢ ₎👌
grep
と sed
は |
(パイプ) で連結できる
e.g.
下記 .env.sample
のコメント行と空白行を削除して http://localhost:4000
を https://my-api.com
に置換したい
# env.sample # コメントです HOST=http://localhost:3000 API=http://localhost:4000 API_FOR_ADMIN=http://localhost:4000/admin # Token を取得して設定してください SECRET_TOKEN=
👇 grep
でコメント行と空白行を削除して sed
で置換する
$ cat .env.sample | grep -v -e '^\s*#' -e '^\s*$' | sed -e 's/http:\/\/localhost:4000/https:\/\/my-api.com/g' > .env
👇
.env
HOST=http://localhost:3000 API=https://my-api.com API_FOR_ADMIN=https://my-api.com/admin SECRET_TOKEN=
₍ ᐢ. ̫ .ᐢ ₎👌
完 全
理 解
[参考]