envファイルの各値に二重引用符を追加する方法

envファイルの各値に二重引用符を追加する方法

.env.shファイルにコピーする必要がある.envファイルがあります。このコマンドは .env.sh ファイルにエクスポートします。

scriptPath=$(dirname "$(readlink -f "$0")")
printenv | sed 's/^\(.*\)$/export \1/g' > ${scriptPath}/.env.sh

私の.envファイル:

DB_MYSQL_TYPE=mysql
DB_MYSQL_CONNECTOR=pymysql
DB_MYSQL_USER=tuandc
DB_MYSQL_PASS=mypass
DB_MYSQL_HOST=mysql.host
DB_MYSQL_PORT=3306
DB_MYSQL_DBNAME=vietnam

.env.shにエクスポートしました。

export DB_MYSQL_TYPE=mysql
export DB_MYSQL_CONNECTOR=pymysql
export DB_MYSQL_USER=tuandc
export DB_MYSQL_PASS=mypass~.(?Tweg
export DB_MYSQL_HOST=mysql.host
export DB_MYSQL_PORT=3306
export DB_MYSQL_DBNAME=vietnam

しかし、DB_MYSQL_PASSでいくつかの特殊文字をエスケープするために二重引用符を使用したいと思います。

printenv | sed -e 's/=\(.*\)/="\1/g' -e 's/$/"/g' >> ${scriptPath}/.env.sh
DB_MYSQL_TYPE="mysql"
DB_MYSQL_CONNECTOR="pymysql"
DB_MYSQL_USER="tuandc"
DB_MYSQL_PASS="mypass~.(?Tweg"
DB_MYSQL_HOST="mysql.host"
DB_MYSQL_PORT="3306"
DB_MYSQL_DBNAME="vietnam"

しかし、上記の2つの正規表現を組み合わせて、次のように.env.shファイルを完成させたいと思います。

export DB_MYSQL_TYPE="mysql"
export DB_MYSQL_CONNECTOR="pymysql"
export DB_MYSQL_USER="tuandc"
export DB_MYSQL_PASS="mypass~.(?Tweg"
export DB_MYSQL_HOST="mysql.host"
export DB_MYSQL_PORT="3306"
export DB_MYSQL_DBNAME="vietnam"

答え1

$ declare -px

declare適切に見えるBashの組み込みコマンドです。このコマンドは、既存の変数割り当てからシェル特殊文字をエスケープします。

答え2

sedこれはストリームエディタを使用して簡単に実行できます。

sed -i.bak -e `s/=/="/;s/$/"/` .env.sh 

これは次のことを行います。

  • -i.bak- 場所で編集し、元のファイルは.env.sh.bak
  • s/=/="/-使用=。 。 。交換" =""。
  • ;- コマンド区切り記号
  • s/$/"/- 行末を一致させ、引用符を追加します。

読むman sed

答え3

1つのステップに進みます。元のファイル(.env)を使用する:

printenv | sed 's/\(^[^=]*\)=\(.*\)/export \1="\2"/' > "$scriptPath/.env.sh"

答え4

ありがとうございます。正規表現2つを結ぶソリューションを見つけました。

printenv | sed -e 's/^\(.*\)$/export \1/g' -e 's/=\(.*\)/="\1/g' -e 's/$/"/g' >> ${scriptPath}/.env.sh

関連情報