sed

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
mayor
сержант
Сообщения: 215
Зарегистрирован: 2008-09-06 10:11:49
Контактная информация:

sed

Непрочитанное сообщение mayor » 2009-08-28 14:43:36

чото читал, получается что аргументом у sed переменная не может быть или может? строка типа:

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

s=`sed -n '$strokap' /film/list`
не работает:

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

sed: 1: "{$stroka}p": unterminated substitute pattern
хочу загнать эту строку в цикл $stroka - номер строки в файле

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

terminus_
проходил мимо

Re: sed

Непрочитанное сообщение terminus_ » 2009-08-28 15:13:03

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

s=`sed -n "$strokap" /film/list`
одинарная кавычка выключает парсинг переменных

Аватара пользователя
mayor
сержант
Сообщения: 215
Зарегистрирован: 2008-09-06 10:11:49
Контактная информация:

Re: sed

Непрочитанное сообщение mayor » 2009-08-28 15:24:55

terminus_ писал(а):

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

s=`sed -n "$strokap" /film/list`
одинарная кавычка выключает парсинг переменных
не работает:

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

(15:23:52)</film> #stroka=4; s=`sed -n "$strokap" /film/list_new`; echo $s

(15:23:56)</film> #stroka=4; s=`sed -n "4p" /film/list_new`; echo $s
MSHOME
(15:24:20)</film> #
Последний раз редактировалось mayor 2009-08-28 15:35:52, всего редактировалось 2 раза.

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

Re: sed

Непрочитанное сообщение Гость » 2009-08-28 15:32:56

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

stroka=4; s=`sed -n "$stroka"p /film/list_new`; echo $s

Аватара пользователя
mayor
сержант
Сообщения: 215
Зарегистрирован: 2008-09-06 10:11:49
Контактная информация:

Re: sed

Непрочитанное сообщение mayor » 2009-08-28 15:36:38

Гость писал(а):

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

stroka=4; s=`sed -n "$stroka"p /film/list_new`; echo $s
"$stroka"p - понял спс. :no:

Аватара пользователя
mayor
сержант
Сообщения: 215
Зарегистрирован: 2008-09-06 10:11:49
Контактная информация:

Re: sed

Непрочитанное сообщение mayor » 2009-08-28 15:40:50

ну вот и весь мой первый майорский скрипт:

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

#! /bin/sh
set +
smbclient=/usr/local/bin/smbclient
sed=/usr/bin/sed
awk=/usr/bin/awk
echo "Набери текс сообщения"
read x
#вирезаем первое поле с именами компов
awk '{print $1}' /var/db/samba/browse.dat > /film/list_kompov
#вырезаем кавычки " вначале и в конце строки
sed  's/\"//g' /film/list_kompov > /film/list_new
nstrok=`wc -l </film/list_new`
stroka=1
while [ $stroka -le $nstrok ]
do
s=`sed -n "$stroka"p /film/list_new`
echo $s
echo $x | smbclient -M $s >/dev/null 2>&1
stroka=`expr $stroka + 1`
done
работает, посылает с консоли сообщение для компов рабочей групы

terminus_
проходил мимо

Re: sed

Непрочитанное сообщение terminus_ » 2009-08-28 16:01:55

mayor писал(а):ну вот и весь мой первый майорский скрипт:

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

#! /bin/sh
set +
smbclient=/usr/local/bin/smbclient
sed=/usr/bin/sed
awk=/usr/bin/awk
echo "Набери текс сообщения"
read x
#вирезаем первое поле с именами компов
awk '{print $1}' /var/db/samba/browse.dat > /film/list_kompov
#вырезаем кавычки " вначале и в конце строки
sed  's/\"//g' /film/list_kompov > /film/list_new
nstrok=`wc -l </film/list_new`
stroka=1
while [ $stroka -le $nstrok ]
do
s=`sed -n "$stroka"p /film/list_new`
echo $s
echo $x | smbclient -M $s >/dev/null 2>&1
stroka=`expr $stroka + 1`
done
работает, посылает с консоли сообщение для компов рабочей групы
Летз оптимайз тхиз!!! ;-)

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

#! /bin/sh
echo "Набери текс сообщения"
read x

#вирезаем первое поле с именами компов
#вырезаем кавычки " вначале и в конце строки
# zagonjaem vse v cikl

for s in `awk '{print $1}' /var/db/samba/browse.dat | sed  's/\"//g'`
do
echo $s
echo $x | smbclient -M $s >/dev/null 2>&1
done

Ы? 8)

Аватара пользователя
mayor
сержант
Сообщения: 215
Зарегистрирован: 2008-09-06 10:11:49
Контактная информация:

Re: sed

Непрочитанное сообщение mayor » 2009-08-28 16:10:02

тип-топ работает! :(, ну while мне первый на глаза попался.. :oops:

terminus_
проходил мимо

Re: sed

Непрочитанное сообщение terminus_ » 2009-08-28 16:16:35

ну вот, зато теперь есть "опыт - сын ошибок трудных" (ц)

просто конструкция

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

for s in [list]
do

done
делает все что надо без использования вывода во внешние файлы.

если у нас есть список из элементов разделенных переводом строки или одна строка из элементов разделенных пробелом, то for станет присваевать значение каждого из элементов переменной s поочередно - это то что надо.

конструкция

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

awk '{print $1}' /var/db/samba/browse.dat | sed  's/\"//g' 
как раз и дает список! :smile:

mazzay
проходил мимо

Re: sed

Непрочитанное сообщение mazzay » 2009-09-12 9:07:07

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

stroka=4; s=`sed -n "$stroka"p /film/list_new`; echo $s
А если нужно тоже, но в конвейере?

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

stroka="before"; echo "after" | sed i\"$stroka"
Не получается получить содержимое переменной

mazzay
проходил мимо

Re: sed

Непрочитанное сообщение mazzay » 2009-09-12 13:38:54

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

stroka="before"; echo "after" | sed "s/^/$stroka/"
вот так заработало