[英]How to replace sed backreference with dyamic variable
我需要用我环境中存在的vars替换字符串。
例如,我现在在我的环境中有以下变量:
export APP_NAME=teste
export DB_DATABASE=dbname
export DB_USER=username
然后,我需要用这些变量中的值替换字符串,例如:
echo "APP_NAME=APP_NAME; DB_DATABASE=DB_DATABASE; DB_USER=DB_USER;" | sed -E "s/\b(\w+)\b=(\1)/\1=`echo \\${\\2}`/g"
然后是我期望的最终结果:
APP_NAME=teste; DB_DATABASE=dbname; DB_USER=username;
但我得到的一切是:
APP_NAME=${APP_NAME}
DB_DATABASE=${DB_DATABASE}
DB_USER=${DB_USER}
使用envsubst
:
echo "APP_NAME=APP_NAME; DB_DATABASE=DB_DATABASE; DB_USER=DB_USER;" | sed 's/=/="$/g;s/;/";/g' | envsubst
输出:
APP_NAME="teste"; DB_DATABASE="dbname"; DB_USER="username";
见: man envsubst
任何POSIX awk:
$ echo "APP_NAME=APP_NAME; DB_DATABASE=DB_DATABASE; DB_USER=DB_USER;" |
awk 'BEGIN{RS=ORS=";"; FS=OFS="="} /=/{$2=ENVIRON[$2]; print}'
APP_NAME=teste; DB_DATABASE=dbname; DB_USER=username;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.