[РЕШЕНО] 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
Пробовал экранировать " ' \ — не срабатывает
Прошу помочь, тех кто сталкивался с этой проблемой
Заранее спасибо.
  • Вопрос задан
  • 27965 просмотров
Решения вопроса 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 надоедливых спамеров, умудряющихся обходить антиспам.
Вот как раз удаление, работает.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы