sed. Команда в шаблоне замены
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- сержант
- Сообщения: 169
- Зарегистрирован: 2008-04-05 20:09:45
- Откуда: Киев
sed. Команда в шаблоне замены
Добрый день!
Вопрос: можно ли в шаблон замены sed'a вставить команду, т.е. возможна ли конструкция:
sed "s/`command1|command2`/some text/"
Ругается bad flag in substitute command
Как сделать?
Вопрос: можно ли в шаблон замены sed'a вставить команду, т.е. возможна ли конструкция:
sed "s/`command1|command2`/some text/"
Ругается bad flag in substitute command
Как сделать?
Услуги хостинговой компании Host-Food.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/
Тарифы на виртуальные сервера (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/
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: sed. Команда в шаблоне замены
можно, только нужно понимать, что и как будет работать:
1. первое, что выполнится - command1
2. вывод первой команды пойдёт на конвеер к command2
3. вывод второй команды подставится в "s/`..`/some text/" вместо обратных кавычек, и при этом переводы строк заменятся на пробелы
4. вызовется сед, которому будет передана строка, получившаяся в двойных кавычках.
то есть, чтобы проверить будет или не будет работать, нужно сначало запустить и проверить, правильно ли скоструировался скрипт седа.
1. первое, что выполнится - command1
2. вывод первой команды пойдёт на конвеер к command2
3. вывод второй команды подставится в "s/`..`/some text/" вместо обратных кавычек, и при этом переводы строк заменятся на пробелы
4. вызовется сед, которому будет передана строка, получившаяся в двойных кавычках.
то есть, чтобы проверить будет или не будет работать, нужно сначало запустить
Код: Выделить всё
echo "s/`command1|command2`/some text/"
-
- сержант
- Сообщения: 169
- Зарегистрирован: 2008-04-05 20:09:45
- Откуда: Киев
Re: sed. Команда в шаблоне замены
Правильно. Но при запуске sed ругается bad flag in substitute command: 's', т.е. первая буква текста замены воспринимается sed'ом как флаг. Как это обойти?zg писал(а):то есть, чтобы проверить будет или не будет работать, нужно сначало запуститьи проверить, правильно ли скоструировался скрипт седа.Код: Выделить всё
echo "s/`command1|command2`/some text/"
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: sed. Команда в шаблоне замены
Код: Выделить всё
zg# echo 'Hello ' | sed -e 's/ / World/'
Hello World
zg#

выложи вывод echo
-
- сержант
- Сообщения: 169
- Зарегистрирован: 2008-04-05 20:09:45
- Откуда: Киев
Re: sed. Команда в шаблоне замены
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/\//\\\//". Не помогает
s/vlan 19 192.168.18.1/24/some text/
Я так понял, проблема в слеше между ip и маской. Как можно его заэкранировать? Пробовал вывод конвейером передать sed'у, типа |sed "s/\//\\//" или |sed "s/\//\\\//". Не помогает
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: sed. Команда в шаблоне замены
можно не экранировать
Код: Выделить всё
zg# echo 'Hello ' | sed -e 's! ! World!'
Hello World
zg#
-
- сержант
- Сообщения: 169
- Зарегистрирован: 2008-04-05 20:09:45
- Откуда: Киев
Re: sed. Команда в шаблоне замены
тогда ругается bad flag in substitute commandzg писал(а):можно не экранировать
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: sed. Команда в шаблоне замены
Код: Выделить всё
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#

-
- сержант
- Сообщения: 169
- Зарегистрирован: 2008-04-05 20:09:45
- Откуда: Киев
Re: sed. Команда в шаблоне замены
Спасибо!
Не знал, что sed'у подойдут тильды вместо слешей
Невнимательно ман прочёл





-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: sed. Команда в шаблоне замены
там по идее можно указывать любой символ, просто большенство являются управляющими