Как заменить обратную ссылку sed на переменную dyamic - PullRequest
4 голосов
/ 06 июля 2019

Мне нужно заменить строку переменными, существующими в моей среде.

Например, в моей среде сейчас есть следующие переменные:

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 ]

3 голосов
/ 06 июля 2019

С любым 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;
3 голосов
/ 06 июля 2019

С 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

...