множественная замена строки с помощью sed - PullRequest
0 голосов
/ 01 сентября 2018

Я использую sed для замены строки в текстовом файле, содержащем следующее:

prop="distributed-${DEPLOY_ENV}.properties, database-${DEPLOY_ENV}.properties, compute-${DEPLOY_ENV}.properties"

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

#!/usr/bin/env bash
env=dev
sed \
-e "s/\${DEPLOY_ENV}/"${env}"/" \

Но я получаю следующий вывод; заменяется только первое вхождение DEPLOY_ENV:

prop="distributed-dev.properties, database-${DEPLOY_ENV}.properties, compute-${DEPLOY_ENV}.properties"

Как заменить все вхождения вместо первого?

Ответы [ 3 ]

0 голосов
/ 01 сентября 2018

Вам просто нужно сделать область видимости глобальной, добавив «g», чтобы вы влияли на все совпадения.

#!/usr/bin/env bash
set -x
env=dev
sed \
-e "s/\${DEPLOY_ENV}/"${env}"/g" \

и выполните команду следующим образом (где text_file_with_envs.txt представляет ваш исходный файл и text_file_with_envs.txt.new - ваш файл обновления):

$ ./sed-multi-repl.sh < ./text_file_with_envs.txt > ./text_file_with_envs.txt.new

это вывод кота в новый файл:

$ cat  text_file_with_envs.txt.new

prop="distributed-dev.properties, database-dev.properties, compute-dev.properties"
0 голосов
/ 01 сентября 2018

Правильный синтаксис:

$ env=dev
$ sed 's/${DEPLOY_ENV}/'"$env"'/g' file
prop="distributed-dev.properties, database-dev.properties, compute-dev.properties"
0 голосов
/ 01 сентября 2018

sed "s/\${DEPLOY_ENV}/"${env}"/g"

Добавить /g для глобальных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...