BSDPORTAL.RU
http://www.bsdportal.ru/

Вставка символов в строку на shell
http://www.bsdportal.ru/viewtopic.php?f=58&t=13582
Страница 1 из 1

Автор:  Andrey74 [ Ср 28 мар, 2007 9:18 am ]
Заголовок сообщения:  Вставка символов в строку на shell

Здравствуйте.
Подскажите, как поменять в файле символы на определённых местах, в определённой строке.
Например имеем файл ipfw.sh:
Код:
#!bin/sh
FwCMD="/sbin/ipfw"
LanOut="xxx.xxx.xxx.xxx"
LanIn="192.168.0.1"
.......

так вот нужно поменять ip адрес xxx.xxx.xxx.xxx на yyy.yyy.yyy.yyy

Автор:  thror [ Ср 28 мар, 2007 9:38 am ]
Заголовок сообщения: 

sed 's/OLD/NEW/g' <input >output

Поменяет все вхождения строки OLD на NEW в файле. Символы '=', '"', '.' нуждаются в экранировании \=, \", \. . У меня получилось что-то вроде этого:

sed 's/LanOut\=\"xxx\.xxx\.xxx\.xxx\"/LanOut\=\"yyy\.yyy\.yyy\.yyy\"/g' <input >output

Если нужно более конкретно, то и задавайте вопрос более конкретно.

Автор:  Andrey74 [ Ср 28 мар, 2007 12:04 pm ]
Заголовок сообщения: 

thror,
Хорошо, задам вопрос конкретней.
Имеется подключение через ADSL, выдаёеся динамический IP, но этот IP я хочу использовать в правилах IPFW. При поднятии tun0, у меня скриптом выделяется выданый IP адрес:

ppp.linkup:
Код:
provider:
 !bg=/путь/ip_my.sh


ip_my.sh:
Код:
#! /bin/sh
ifconfig tun0 | grep inet | awk '{print $2} > /путь/ip_my.txt


Далее хочу значение этого IP из файла ip_my.txt вставить в переменную LanOut файла ipfw_my.sh:
Код:
#! /bin/sh
FwCMD="/sbin/ipfw"
LanOut="предыдущий IP"
LanIn="192.168.0.1"
.......


Далее запускаю этот файл и применяю правила.
И так при каждом подключении.

Так вот и хотелось бы узнать как сделать так, чтобы при каждом подключении в файле ipfw_my.sh старый IP заменялся на новый?

А может кто-нибудь предложит более оптимальный вариант?

Автор:  inspirra [ Ср 28 мар, 2007 1:02 pm ]
Заголовок сообщения: 

В ppp.linkup:
Код:
!bg /bin/echo MYADDR > /var/run/ppp-ip.LABEL

* MYADDR и LABEL -- автоматически-заменяемые ppp-переменные

В файле ipfw_my.sh:
Код:
LanOut=$(cat /var/run/ppp-ip.LABEL)

* вместо LABEL -- подставить реальное имя ppp-метки

=======================
Или сразу запускайте из ppp.linkup без всякий промежуточных файлов:
Код:
!bg /path/ipfw_my.sh MYADDR


В файле ipfw_my.sh:
Код:
LanOut=$1


Если я правильно понял задачу.

Автор:  thror [ Ср 28 мар, 2007 4:41 pm ]
Заголовок сообщения: 

Все. Кажется понял. inspirra правда все сказал. Но я добавлю вот что.

Если проблема только в юзании в ipfw_my.sh текущего ip, то проще простого. Такая конструкция вам поможет если вы предпочитаете конвейеры (обратите внимание на кавычки):
Код:
...
LanOut="`ifconfig tun0 | grep inet | awk '{print $2}'`"
...

А из ppp.linkup лишнее уберите.

Автор:  grayich [ Ср 28 мар, 2007 5:19 pm ]
Заголовок сообщения: 

thror писал(а):
sed 's/OLD/NEW/g' <input >output


сед умеет менять прямо в файле:
sed -ie 's/ЧТО ИЩЕМ/НА ЧТО МЕНЯЕМ/g' file

Автор:  Andrey74 [ Ср 28 мар, 2007 5:30 pm ]
Заголовок сообщения: 

Спасибо всем. Сделал как сказал inspirra и всё заработало.

Страница 1 из 1 Часовой пояс: UTC + 4 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/