Страница 1 из 1

sed

Добавлено: 2009-08-28 14:43:36
mayor
чото читал, получается что аргументом у sed переменная не может быть или может? строка типа:

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

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

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

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

Re: sed

Добавлено: 2009-08-28 15:13:03
terminus_

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

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

Re: sed

Добавлено: 2009-08-28 15:24:55
mayor
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> #

Re: sed

Добавлено: 2009-08-28 15:32:56
Гость

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

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

Re: sed

Добавлено: 2009-08-28 15:36:38
mayor
Гость писал(а):

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

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

Re: sed

Добавлено: 2009-08-28 15:40:50
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
работает, посылает с консоли сообщение для компов рабочей групы

Re: sed

Добавлено: 2009-08-28 16:01:55
terminus_
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)

Re: sed

Добавлено: 2009-08-28 16:10:02
mayor
тип-топ работает! :(, ну while мне первый на глаза попался.. :oops:

Re: sed

Добавлено: 2009-08-28 16:16:35
terminus_
ну вот, зато теперь есть "опыт - сын ошибок трудных" (ц)

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

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

for s in [list]
do

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

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

конструкция

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

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

Re: sed

Добавлено: 2009-09-12 9:07:07
mazzay

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

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

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

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

Re: sed

Добавлено: 2009-09-12 13:38:54
mazzay

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

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