条件にマッチした行を抜き出して外部ファイルに書き込む

2022年5月3日

条件にマッチした行を抜き出して外部ファイルに書き込む

dockerfileでdjango環境をビルド出来るようにしているところです。djangoのSECRET_KEYを「.env」に移すコマンドを書き残しておきたいと思います。

参考:どのUNIXコマンドでも使える正規表現

grepとsed

settings.pyのダミーファイルで試してみたいと思います。sample_settings.pyは下記の通りです。


...
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'pej^q2ql$$#bzg#crh6k_9(p=%p)&6x(kwh@nos&=!$ej&60fh'
# SECURITY WARNING: don't run with debug turned on in production!
...

抜き出したい部分は上記の「SECRET_KEY = 'pej^q2ql$$#bzg#crh6k_9(p=%p)&6x(kwh@nos&=!$ej&60fh'」なのでgrepを使って抜き出します。

下記の通り該当する行が抜き出せているのがわかります。


grep -e '^SECRET_KEY' sample_settings.py
SECRET_KEY = 'pej^q2ql$$#bzg#crh6k_9(p=%p)&6x(kwh@nos&=!$ej&60fh'
#「^」- 文字列(通常は行)の先頭にマッチ

きちんと結果が返ってきているのが確認できましたがスペースが余計なので結果を「|」で受け取りスペースを除去します。


grep -e '^SECRET_KEY' sample_settings.py | sed -e "s/ //g"
SECRET_KEY='pej^q2ql$$#bzg#crh6k_9(p=%p)&6x(kwh@nos&=!$ej&60fh'
# 「|」- コマンドの入出力を次のコマンドへ引き渡す

置換によりスペースが除去された結果が返ってきたのが確認できたのでこの結果をsample_env.pyに書き込みます。


grep -e '^SECRET_KEY' sample_settings.py | sed -e "s/ //g" >> sample_env.py
cat sample_env.py
SECRET_KEY='pej^q2ql$$#bzg#crh6k_9(p=%p)&6x(kwh@nos&=!$ej&60fh'

ちゃんと書き込まれているのが確認できました!

追記

ちなみにsettings.pyを「env」に書き換える場合は下記の通りです。


sed -i -e "s/^SECRET_KEY.*/SECRET_KEY = env('SECRET_KEY')/g" settings.py
#「.」- 任意の1文字にマッチ
#「*」- 繰返し指定子で直前に記述した文字が0文字以上連続していることを指定し、後続の繰返し指定子よりも優先して可能な限り最大数マッチさせようとする。
YouTube

2022年5月3日