sed. Команда в шаблоне замены

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

sed. Команда в шаблоне замены

Непрочитанное сообщение Termitnik » 2008-09-08 10:24:26

Добрый день!
Вопрос: можно ли в шаблон замены sed'a вставить команду, т.е. возможна ли конструкция:
sed "s/`command1|command2`/some text/"
Ругается bad flag in substitute command
Как сделать?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: sed. Команда в шаблоне замены

Непрочитанное сообщение zg » 2008-09-08 10:36:58

можно, только нужно понимать, что и как будет работать:
1. первое, что выполнится - command1
2. вывод первой команды пойдёт на конвеер к command2
3. вывод второй команды подставится в "s/`..`/some text/" вместо обратных кавычек, и при этом переводы строк заменятся на пробелы
4. вызовется сед, которому будет передана строка, получившаяся в двойных кавычках.

то есть, чтобы проверить будет или не будет работать, нужно сначало запустить

Код: Выделить всё

echo "s/`command1|command2`/some text/"
и проверить, правильно ли скоструировался скрипт седа.

Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Re: sed. Команда в шаблоне замены

Непрочитанное сообщение Termitnik » 2008-09-08 10:56:29

zg писал(а):то есть, чтобы проверить будет или не будет работать, нужно сначало запустить

Код: Выделить всё

echo "s/`command1|command2`/some text/"
и проверить, правильно ли скоструировался скрипт седа.
Правильно. Но при запуске sed ругается bad flag in substitute command: 's', т.е. первая буква текста замены воспринимается sed'ом как флаг. Как это обойти?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: sed. Команда в шаблоне замены

Непрочитанное сообщение zg » 2008-09-08 11:36:16

Код: Выделить всё

zg# echo 'Hello ' | sed -e 's/ / World/'
Hello World
zg# 
:roll: у меня всё пашет

выложи вывод echo

Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Re: sed. Команда в шаблоне замены

Непрочитанное сообщение Termitnik » 2008-09-08 11:48:22

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/\//\\\//". Не помогает

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: sed. Команда в шаблоне замены

Непрочитанное сообщение zg » 2008-09-08 12:07:51

можно не экранировать

Код: Выделить всё

zg# echo 'Hello ' | sed -e 's! ! World!'
Hello World
zg#

Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Re: sed. Команда в шаблоне замены

Непрочитанное сообщение Termitnik » 2008-09-08 12:26:33

zg писал(а):можно не экранировать
тогда ругается bad flag in substitute command

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: sed. Команда в шаблоне замены

Непрочитанное сообщение zg » 2008-09-08 12:58:40

Код: Выделить всё

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# 
8)

Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Re: sed. Команда в шаблоне замены

Непрочитанное сообщение Termitnik » 2008-09-08 13:30:13

Спасибо! :drinks: Не знал, что sed'у подойдут тильды вместо слешей :oops: Невнимательно ман прочёл :oops: :oops:

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: sed. Команда в шаблоне замены

Непрочитанное сообщение zg » 2008-09-08 13:40:56

там по идее можно указывать любой символ, просто большенство являются управляющими