sed: переменная в качестве шаблона поиска

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
proDd
рядовой
Сообщения: 46
Зарегистрирован: 2007-10-08 21:13:40

sed: переменная в качестве шаблона поиска

Непрочитанное сообщение proDd » 2008-03-12 14:13:41

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

например скрипт

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

#!/bin/sh
a="prodd"
sed '/$a/d' test.f
по идеи из файла test.f следующего содержания

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

ivan
prodd
mike
должен выдавать

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

ivan
mike
а он собственно ничего не выдает(

Хостинговая компания 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/

Аватара пользователя
idle
мл. сержант
Сообщения: 80
Зарегистрирован: 2007-02-28 12:21:52
Откуда: Барселона
Контактная информация:

Re: sed: переменная в качестве шаблона поиска

Непрочитанное сообщение idle » 2008-03-12 16:13:07

Кавычки замените.

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

#!/bin/sh
a="prodd"
sed "/$a/d" test.f

proDd
рядовой
Сообщения: 46
Зарегистрирован: 2007-10-08 21:13:40

Re: sed: переменная в качестве шаблона поиска

Непрочитанное сообщение proDd » 2008-03-12 17:50:25

спасибо помогло
я вообще-то забыл что одинарные кавычки заставляют интрепритатор не разбирать строку, а читать как есть(

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

#!/bin/sh
a="prodd"
sed /$a/d test.f
мда без ковычек тоже работает, чтото сразу я до этого не додумался...(

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

Re: sed: переменная в качестве шаблона поиска

Непрочитанное сообщение zg » 2008-03-12 20:34:28

не стоит забывать, что шелл сначала расширяет переменные, а только потом выполняет команду, поэтому $a и "$a" имеет разный смысл

Гость
проходил мимо

Re: sed: переменная в качестве шаблона поиска

Непрочитанное сообщение Гость » 2008-03-13 0:59:11

proDd писал(а):мда без ковычек тоже работает, чтото сразу я до этого не додумался...(
если в переменной хранятся спецсимволы (например, пробел), то у тя будет ошибка, как и будет ошибка, если в переменной есть символ /, к-ый является разделителем regexp'а, заменителя и команды в sed(1)

Гость
проходил мимо

Re: sed: переменная в качестве шаблона поиска

Непрочитанное сообщение Гость » 2008-03-13 1:03:01

Гость писал(а):спецсимволы
специальные для sh(1) и для sed(1). Это пространство доступных символов еще больше может сократиться, если скрипт генерирует другой скрипт на другом ЯП. ,)

Гость
проходил мимо

Re: sed: переменная в качестве шаблона поиска

Непрочитанное сообщение Гость » 2011-03-20 4:00:31

Помогите и мне если это возможно.

есть две переменных a и b. a=old_md_sum b=new_md_sum.

переменная имеет вид: (echo "$a")

d50c7d03ae6f277762a0fee37639c2a2
6d7b29590b83666f56d2cac27c06c18b
2081f795b0f92490c1c3f00b964e36de
896e801773bc584f860baef19f1b112d
0fa94830d54c83462e8f3c12fcb7c67f
etc

Конструкция sed "s/$a/$b/q" file_md5 не работает. Я хотел таким образом заменить все суммы в file_md5.
Конструкция работает если в переменной одно значение суммы. Я плохо понимаю как это работает.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: sed: переменная в качестве шаблона поиска

Непрочитанное сообщение kpp » 2011-03-20 13:52:35

Что в переменной b?
Что в файле file_md5 ?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.