【问题标题】:How to replace sed backreference with dyamic variable如何用动态变量替换 sed 反向引用
【发布时间】:2019-11-16 16:53:12
【问题描述】:

我需要用我的环境中存在的变量替换一个字符串。

例如,我现在的环境中有以下变量:

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}

【问题讨论】:

    标签: regex linux bash sed environment-variables


    【解决方案1】:

    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="用户名";

    见:man envsubst

    【讨论】:

    • 哇!这真太了不起了!我从未听说过“envsubst”。谢谢!!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 2021-11-20
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 2016-10-06
      相关资源
      最近更新 更多