URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 44156
[ Назад ]

Исходное сообщение
"вопрос по GREP"

Отправлено Диф , 19-Май-04 13:18 
Подскажите, люди добрые, как с помощью команды grep выбрать не всю строку, содержащую нужное мне рег. выражение, а только само рег выр.

точнее из строчки '123(qwe)fdg' нужно выбрать то, что находится в скобках...


Содержание

Сообщения в этом обсуждении
"вопрос по GREP"
Отправлено Диф , 19-Май-04 13:29 
и еще...
какие опции нужны для ls что бы выводился полный путь к файлу?

"вопрос по GREP"
Отправлено dilmah , 19-Май-04 13:56 
>и еще...
>какие опции нужны для ls что бы выводился полный путь к файлу?
>

можно find'ом.  С -maxdepth 1 он вроде только текущую директорию будет смотреть.


"вопрос по GREP"
Отправлено dilmah , 19-Май-04 13:53 
>Подскажите, люди добрые, как с помощью команды grep выбрать не всю строку,
>содержащую нужное мне рег. выражение, а только само рег выр.
>
>точнее из строчки '123(qwe)fdg' нужно выбрать то, что находится в скобках...

Стандартный grep так не умеет.  Можно sed'ом:

cat file | grep regexp | sed "s/^.*\(regexp\).*$/\\1/"


"вопрос по GREP"
Отправлено Диф , 19-Май-04 16:18 
>Стандартный grep так не умеет.  Можно sed'ом:
>
>cat file | grep regexp | sed "s/^.*\(regexp\).*$/\\1/"

вся проблема в том, что мое regexp является * ((

попробую поподробней описать проблему...

Задача:
ОС FreeBSD. выбрать из портов все файлы с названием distinfo
они содаржат несколько строк
--
MD5 (xc/X336src-1.tgz) = bbfa...
MD5 (xc/X336src-2.tgz) = ...
--
сначала нужно выбрать строку, начинающуюся с MD5 и не заканчивающуюся на IGNORE
далее необходимо выбрать все содержимое скобок
и отталкиваясь от директории /usr/ports/distfiles
проверить контрольную сумму этого файла
#MD5 path_to_file
результат этой команды сверить с выбранной строкой
если результат совпал, то ничего не делать, иначе удалить этот файл (если он существует) и записать его имя в какой-нибудь лог-файл

соответственно нужно пройти рекурсивно по всем папкам портов

хочется написать на shell'e...
заодно и поизучать его ))

пока кое-что надумал...
но может вы что-нить подскажете?


"вопрос по GREP"
Отправлено dilmah , 19-Май-04 21:26 
> ОС FreeBSD. выбрать из портов все файлы с названием distinfo
> они содаржат несколько строк
>--
>MD5 (xc/X336src-1.tgz) = bbfa...
>MD5 (xc/X336src-2.tgz) = ...
>--
>сначала нужно выбрать строку, начинающуюся с MD5 и не заканчивающуюся на IGNORE
>
>далее необходимо выбрать все содержимое скобок
>и отталкиваясь от директории /usr/ports/distfiles
>проверить контрольную сумму этого файла
>#MD5 path_to_file
>результат этой команды сверить с выбранной строкой
>если результат совпал, то ничего не делать, иначе удалить этот файл (если
>он существует) и записать его имя в какой-нибудь лог-файл
>
>соответственно нужно пройти рекурсивно по всем папкам портов
>
>хочется написать на shell'e...
>заодно и поизучать его ))
>
>пока кое-что надумал...
>но может вы что-нить подскажете?

те файлы как-то похожи на вывод md5 или mtree.
Может можно сгенерировать такой же файл для имеющихся файлов и
сделать diff..

И перед тем как смотреть sed или awk -- многие вещи просто cut'ом делаются.


"вопрос по GREP"
Отправлено Dif , 19-Май-04 23:22 
>те файлы как-то похожи на вывод md5 или mtree.
>Может можно сгенерировать такой же файл для имеющихся файлов и
>сделать diff..
>
сейчас делаю все с помощью awk grep cat )))


>И перед тем как смотреть sed или awk -- многие вещи просто
>cut'ом делаются.

знать бы что это такое ))))))))
сейчас маны посмотрю

допишу криптик, выложу обязательно
порежете мне его чуток.. уж больно я его накрутил от незнания (((



"вопрос по GREP"
Отправлено Dracula , 19-Май-04 23:38 
Например

grep "MD5" /usr/ports/astro/luna/distinfo | awk -F \( '{print$2}' | awk -F \) '{print$1}'

или


grep "MD5" /usr/ports/astro/*/distinfo | awk -F \( '{print$2}' | awk -F \) '{print$1}' > checksum.log

а потом что такое

while read CHECKSUM
do
     if [ "$CHECKSUM" = "с_чем_надо_сравнить" ]
     then
          echo "OK"
#    else  
#    есть несколько вариантов удаления, но вот башка болит ..    
     fi
done < checksum.log


=========================
сразу все порты вряд ли проверит (  list too long )
так что придется кусками


"вопрос по GREP"
Отправлено vt , 19-Май-04 15:44 
>Подскажите, люди добрые, как с помощью команды grep выбрать не всю строку,
>содержащую нужное мне рег. выражение, а только само рег выр.
>
>точнее из строчки '123(qwe)fdg' нужно выбрать то, что находится в скобках...

grep -o


"вопрос по GREP"
Отправлено Диф , 19-Май-04 16:21 
>
>grep -o

grep: invalid option --o



"вопрос по GREP"
Отправлено vt , 19-Май-04 16:43 
>>grep -o
>
>grep: invalid option --o

freebsd ?
тогда только с помощью sed, awk, perl и т.п.