Команда Linux для замены текста в файле текстом из перенаправленного вывода - PullRequest
1 голос
/ 20 сентября 2011

Я работаю над сценарием оболочки для автоматизации некоторых серверных задач.Одна из основных вещей, которые мне нужно сделать, - это настройка.

Я пытаюсь найти быстрый способ извлечь данные из одного источника, а затем заменить данные из другого источника.Короче говоря, я пытаюсь заменить IP-адрес в my.cnf на один из ifconfig.IP-адрес, который я хочу изменить, является адресом привязки.

Вот пример того, что я хочу сделать:

A.Используйте ifconfig - для получения информации о сети (которая будет включать в себя IP-адрес).

B.С этим выводом используйте регулярное выражение для извлечения только IP-адреса

C.Используйте IP-адрес для замены значения адреса привязки в my.cnf

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

РЕДАКТИРОВАТЬ

Вот код, который это сделал:

ip=`ifconfig eth0 | grep "inet addr"| cut -d ":" -f2 | cut -d " " -f1` ; sed -i "s/\(bind-address[\t ]*\)=.*/\1= $ip/" /etc/mysql/my.cnf

Большое спасибо Jaidev Sridharдля направления.

Ответы [ 3 ]

1 голос
/ 20 сентября 2011
$ ip=`ifconfig eth0 | grep "inet addr"| cut -d ":" -f2 | cut -d " " -f1`; sed -i "s/MYIP=.*/MYIP=$ip/g" foo.cnf

Предполагая, что:

  • eth0 - это интерфейс
  • Вам нужен адрес ipv4
  • Ваш файл conf - foo.cnf, и в нем есть строка MYIP = a.b.c.d, которую необходимо заменить
0 голосов
/ 20 сентября 2011

Без разрезов и переменная ip не загрязняет.

ip="`ifconfig eth0 | sed 's/.*inet addr:\([0-9\.]*\).*/\1/p'`" sed -i "s/^\(bind_address\)=.*/\1=$ip/" /etc/my.cnf
0 голосов
/ 20 сентября 2011

Вы можете использовать awk / cut / sed для извлечения IP-адреса из вывода ifconfig.

И используйте sed -i для обновления my.cnf

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