Страница 1 из 1
sed. Команда в шаблоне замены
Добавлено: 2008-09-08 10:24:26
Termitnik
Добрый день!
Вопрос: можно ли в шаблон замены sed'a вставить команду, т.е. возможна ли конструкция:
sed "s/`command1|command2`/some text/"
Ругается bad flag in substitute command
Как сделать?
Re: sed. Команда в шаблоне замены
Добавлено: 2008-09-08 10:36:58
zg
можно, только нужно понимать, что и как будет работать:
1. первое, что выполнится - command1
2. вывод первой команды пойдёт на конвеер к command2
3. вывод второй команды подставится в "s/`..`/some text/" вместо обратных кавычек, и при этом переводы строк заменятся на пробелы
4. вызовется сед, которому будет передана строка, получившаяся в двойных кавычках.
то есть, чтобы проверить будет или не будет работать, нужно сначало запустить
и проверить, правильно ли скоструировался скрипт седа.
Re: sed. Команда в шаблоне замены
Добавлено: 2008-09-08 10:56:29
Termitnik
zg писал(а):то есть, чтобы проверить будет или не будет работать, нужно сначало запустить
и проверить, правильно ли скоструировался скрипт седа.
Правильно. Но при запуске sed ругается bad flag in substitute command: 's', т.е. первая буква текста замены воспринимается sed'ом как флаг. Как это обойти?
Re: sed. Команда в шаблоне замены
Добавлено: 2008-09-08 11:36:16
zg
Код: Выделить всё
zg# echo 'Hello ' | sed -e 's/ / World/'
Hello World
zg#

у меня всё пашет
выложи вывод echo
Re: sed. Команда в шаблоне замены
Добавлено: 2008-09-08 11:48:22
Termitnik
bash-2.05$ echo "s/`cat /etc/file|grep vlan|tail -1`/some text/"
s/vlan 19 192.168.18.1/24/some text/
Я так понял, проблема в слеше между ip и маской. Как можно его заэкранировать? Пробовал вывод конвейером передать sed'у, типа |sed "s/\//\\//" или |sed "s/\//\\\//". Не помогает
Re: sed. Команда в шаблоне замены
Добавлено: 2008-09-08 12:07:51
zg
можно не экранировать
Код: Выделить всё
zg# echo 'Hello ' | sed -e 's! ! World!'
Hello World
zg#
Re: sed. Команда в шаблоне замены
Добавлено: 2008-09-08 12:26:33
Termitnik
zg писал(а):можно не экранировать
тогда ругается bad flag in substitute command
Re: sed. Команда в шаблоне замены
Добавлено: 2008-09-08 12:58:40
zg
Код: Выделить всё
zg# echo 'vlan 19 192.168.18.1/24' | sed -e 's\!vlan 19 192.168.18.1/24\!some text\!'
some text
zg# echo 'vlan 19 192.168.18.1/24' | sed -e 's~vlan 19 192.168.18.1/24~some text~'
some text
zg#

Re: sed. Команда в шаблоне замены
Добавлено: 2008-09-08 13:30:13
Termitnik
Спасибо!

Не знал, что sed'у подойдут тильды вместо слешей

Невнимательно ман прочёл

Re: sed. Команда в шаблоне замены
Добавлено: 2008-09-08 13:40:56
zg
там по идее можно указывать любой символ, просто большенство являются управляющими