Как использовать переменную в команде sed для замены значения свойства в файле свойств

Я могу использовать приведенную ниже команду, чтобы изменить значение цели с помощью жесткого кодирования.

sed -ie s/^target=.*/target=google.com/ url.properties

Но если я использовал переменную, я получаю ошибку. Я не знаю, как работает команда sed. Мне нужно было только установить систему сборки.

url = google.com
sed -ie s/^target=.*/target=$url/ url.properties

ошибка sed: -e выражение #1, символ 25: неопределенная команда `s'

2 ответа

Решение

Проблема может происходить, потому что ваш URL может содержать / который bash интерпретирует как синтаксис sed, так что-то вроде https/www.google.com заканчивается что-то вроде:

sed -ie 's/^target=.*/target=https/www.google.com/' url.properties

Я предлагаю разделить любые специальные символы, чтобы избежать sed быть в замешательстве:

url=google.com
url=`echo $url | sed -e "s/\//\\\\\\\\\//g"` # delimits backslash in URL's
sed -ie "s/^target=.*/target=$url/" url.properties

Две проблемы:

  • Вы не можете иметь пробелы в назначениях переменных в bash
  • Вы должны процитировать sed команда (и в идеале URL тоже)

Рабочий пример:

url="google.com"
sed -ie "s/^target=.*/target=$url/" url.properties
Другие вопросы по тегам