我有一个.env文件,需要复制到一个.env.sh文件。该命令导出到.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.shDB_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个regex使.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"发布于 2022-03-28 17:26:53
$ declare -pxdeclare是一个Bash内置命令,似乎是合适的。此命令在现有变量赋值中转义shell的特殊字符。
发布于 2022-03-28 14:23:02
使用sed轻松地完成了流EDitor:
sed -i.bak -e `s/=/="/;s/$/"/` .env.sh 这确实是:
-i.bak -就地编辑,原始文件保留为.env.sh.bak。s/=/="/ --将"=“改为"="”。;命令分隔符s/$/"/ -匹配行尾并添加一个引号.读取man sed
发布于 2022-03-28 18:00:36
在一段时间内完成。使用原始文件(.env):
printenv | sed 's/\(^[^=]*\)=\(.*\)/export \1="\2"/' > "$scriptPath/.env.sh"https://unix.stackexchange.com/questions/697106
复制相似问题