LINUX.ORG.RU

Это что, корявый grep -R?

t184256 ★★★★★
()
Ответ на: комментарий от anonymous

> Прирожденный идиот неосилятор документации. // починено
KRON73? Ты вылогинился?

Phaser
() автор топика
Ответ на: комментарий от Phaser

Зря старался что ли?

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

Но это тоже не нужно.

find . -type f -name mask -print0 | xargs -0 grep
baverman ★★★
()
ls -l1 $directory | grep -v ^d 

мастерское исключение директорий продемонстрировать хотел ты.
йода стайл коментс

fr_butch
()

>grep -v search.sh

А вот за это надо расстреливать. А если будет файл 'ololo_search.sh_123', то оно его выкинет? Это делается так:

ls | grep -v «^`basename $0`$»

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

Это чтобы исключить поиск внутри этого скрипта.
ls | grep -v «^`basename $0`$»
Это делает делает то же самое? Запись не совсем понятная.

Phaser
() автор топика
Ответ на: комментарий от fr_butch

> мастерское исключение директорий продемонстрировать хотел ты.
Да, мастер ЙОДА.

Phaser
() автор топика
Ответ на: комментарий от Phaser

Это делает делает то же самое? Запись не совсем понятная.

Это делает то же самое, но правильно. Вот пример:

max@laptop ~/tmpdir $ ls -l
итого 0
-rw-r--r-- 1 max max 0 Июн 21 13:27 123search.sh123
-rw-r--r-- 1 max max 0 Июн 21 13:27 afile
-rw-r--r-- 1 max max 0 Июн 21 13:27 search.sh
max@laptop ~/tmpdir $ ls | grep -v search.sh
afile
max@laptop ~/tmpdir $ ls | grep -v '^search.sh$'
123search.sh123
afile
max@laptop ~/tmpdir $

Регэкспу 'search.sh' удовлетворило 2 файла: 'search.sh' и '123seach.sh123'. А регэкспу '^search.sh$' удовлетворил только нужный, т.к. ^ - начало строки, а $ - конец.

А в записи «^`basename $0`$» получается так: $0 - это команда, которой вызван скрипт, например '/usr/bin/search.sh' или './search.sh'. 'basename $0' выведет на stdout 'search.sh', а `basename $0` подставит вместо себя 'search.sh', получится «^search.sh$».

Но именно в этом скрипте лучше убирать search.sh не grep'ом, а просто потом уже проверить в цикле, который дальше. Цикл тоже уныл: там каждую итерацию вызывается sed для получения строки, когда это можно было сделать так: 'for file in `<file_list`' с IFS=$'\x0a' (перевод строки). И да, оба варианта не учитывают, что в именах файлов могут быть переводы строки (да, они могут там быть). Поэтому лучше как-то так (код не тестировал):

OLDIFS="$IFS"
IFS=$'\x00'
for file in `find . -maxdepth 1 -print0`; do
# Call grep here and do a lot of stupid commands
done
IFS="$OLDIFS"
unset OLDIFS
А если вместо '# Call grep here and do a lot of stupid commands' будет 1 простая команда, то можно заюзать xargs:
find . -maxdepth 1 -print0 | xargs -0 grep "$REGEXP"

gentoo_root ★★★★★
()
Ответ на: комментарий от Phaser

>А вот за это тебе не зачет.

# Call grep here and do a lot of stupid commands

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

gentoo_root ★★★★★
()
Ответ на: комментарий от Jetty

>for file in `ls`; do [ -d «$file» ] && echo «this is dir» || echo this is not dir"; done ; echo ":)"

А это не работает, если в именах файлов есть пробелы.

gentoo_root ★★★★★
()

гуй как всегда удобнее :-)) regexxer позволяет все это плюс замену и даже редактирование файлов прямо в проге, не вылезая для этого в какой нибудь редактор

SergMarkov
()
Ответ на: комментарий от gentoo_root

Это пример. Никто не мешает юзать IFS или делать так:

cd $dir
for file in *; do
 [ -d "$file" ] && echo "this is dir" || echo this is not dir"
done
cd $start_dir
echo ":)"

Jetty ★★★★★
()

Я все для себя уяснил.

Phaser
() автор топика
cd directory_you_need/
find . -type f -exec grep -iHE 'text_to_find' {} \;
unanimous ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.