[РЕШЕНО] Sed Подстановка переменной в регулярное выражение

Привет, хабражители!
Пишу скрипт
Есть переменная
ip=xx.xx.xx.xx
Нужно заменить её значением строку в файле.
Делаю так
cat /etc/file.conf | sed 's/^IP.*/IPADDRESS=$ip/g' > /etc/file.conf2 && mv /etc/file.conf2 /etc/file.conf
На выходе получаю
IPADDRESS=$ip
вместо
IPADDRESS=xx.xx.xx.xx
Пробовал экранировать " ' \ — не срабатывает
Прошу помочь, тех кто сталкивался с этой проблемой
Заранее спасибо.
  • Вопрос задан
  • 25426 просмотров
Решения вопроса 1
sledopit
@sledopit
Кавычки, ну кавычки поменяйте же. Никаких `echo`.
И если у вас GNU sed, то у него есть опция -i. Тогда команда будет выглядеть так:
sed -i "s/^IP.*/IPADDRESS=$ip/g" /etc/file.conf
Ещё так можно:
sed -i 's/^IP.*/IPADDRESS='$ip'/g' /etc/file.conf
Если же sed не GNU, то:
sed "s/^IP.*/IPADDRESS=$ip/g" /etc/file.conf > /etc/file.conf2 && mv /etc/file.conf2 /etc/file.conf
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@dmitryshiray
Сам мучился с использованием переменных в скрипте. Решение вот такое:
1) кавычки не одинарные, а двойные.
2) имя переменной заключается в фигурные скобки

S1=bla_bla
S2=zlo_zlo

sed -i "s/${S1}/${S2}/g" path_to_my_file
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 180 000 до 250 000 руб.
Консист-ОС Москва
от 120 000 до 150 000 руб.
Skyeng Москва
от 150 000 до 170 000 руб.