如何用动态变量替换sed后向引用

时间:2019-07-06 11:03:04

标签: regex linux bash sed environment-variables

我需要用环境中存在的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}

2 个答案:

答案 0 :(得分:3)

使用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

答案 1 :(得分:3)

使用任何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;