Задать вопрос

[РЕШЕНО] 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
Пробовал экранировать " ' \ — не срабатывает
Прошу помочь, тех кто сталкивался с этой проблемой
Заранее спасибо.
  • Вопрос задан
  • 44557 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 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
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@dmitryshiray
Сам мучился с использованием переменных в скрипте. Решение вот такое:
1) кавычки не одинарные, а двойные.
2) имя переменной заключается в фигурные скобки

S1=bla_bla
S2=zlo_zlo

sed -i "s/${S1}/${S2}/g" path_to_my_file
Ответ написан
Комментировать
@Aleksyk
sed -i s/${ip}//g /etc/postfix/allowip;

Писал скриптик добавления, удаления ip надоедливых спамеров, умудряющихся обходить антиспам.
Вот как раз удаление, работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы