Подскажите, люди добрые, как с помощью команды grep выбрать не всю строку, содержащую нужное мне рег. выражение, а только само рег выр.точнее из строчки '123(qwe)fdg' нужно выбрать то, что находится в скобках...
и еще...
какие опции нужны для ls что бы выводился полный путь к файлу?
>и еще...
>какие опции нужны для ls что бы выводился полный путь к файлу?
>можно find'ом. С -maxdepth 1 он вроде только текущую директорию будет смотреть.
>Подскажите, люди добрые, как с помощью команды grep выбрать не всю строку,
>содержащую нужное мне рег. выражение, а только само рег выр.
>
>точнее из строчки '123(qwe)fdg' нужно выбрать то, что находится в скобках...Стандартный grep так не умеет. Можно sed'ом:
cat file | grep regexp | sed "s/^.*\(regexp\).*$/\\1/"
>Стандартный 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...
заодно и поизучать его ))пока кое-что надумал...
но может вы что-нить подскажете?
> ОС 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'ом делаются.
>те файлы как-то похожи на вывод md5 или mtree.
>Может можно сгенерировать такой же файл для имеющихся файлов и
>сделать diff..
>
сейчас делаю все с помощью awk grep cat )))
>И перед тем как смотреть sed или awk -- многие вещи просто
>cut'ом делаются.знать бы что это такое ))))))))
сейчас маны посмотрюдопишу криптик, выложу обязательно
порежете мне его чуток.. уж больно я его накрутил от незнания (((
Например
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 выбрать не всю строку,
>содержащую нужное мне рег. выражение, а только само рег выр.
>
>точнее из строчки '123(qwe)fdg' нужно выбрать то, что находится в скобках...grep -o
>
>grep -ogrep: invalid option --o
>>grep -o
>
>grep: invalid option --ofreebsd ?
тогда только с помощью sed, awk, perl и т.п.