Поиск текста строки внутри файла по маске find exec egrep

Задача: найти определенную строку, текст внутри всех файлов, в определенной директории:

# find /path/to/directory/ -name "*" -type f -exec egrep "stroka" {} \;

Возможно потребуется ключ -print чтобы вывести пути до файла в котором найдено искомое соответствие.

# find /path/to/directory/ -name "*" -type f -exec egrep "stroka" {} \; -print

где /path/to/directory/ путь до директории, а stroka этот тот текст который Вы ищите.

Учитывайте , что если в строке присутствуют спец символы, их нужно экранировать обратным слешем:

# find /path/to/directory/ -name "*" -type f -exec egrep "stroka\)" {} \;

Если Вы набираете указанные выше команды , именно в таком виде, то результат поиска будет отображен непосредственно в терминале shell клиента. Что может быть нечитаемо.

Чтобы результат записать в файл, добавляем > /path/to/another/directory/search.lst /dev/null

Должно получиться следующая строка:

# find /path/to/directory/ -name "*" -type f -exec egrep "stroka"  > /path/to/another/directory/search.lst /dev/null {} \;

Файл с результатами поиска (в нашем примере search.lst), не должен находится в той же директории в какой находятся сканируемые файлы. Иначе Вы рискуете получить бесконечный цикл и search.lst размером со всё свободное место на жёстком диске.

Допустим Вы ищите среди файлов в директории /usr/local/home/www/ , тогда файл с результатами может находится в директории /usr/local/home/ , но не в /usr/local/home/www/  и далее.

Чтобы искать только среди файлов PHP измените маску с -name «*»  на -name «*.php» .

Если необходимо искать долго, файлов много, имеет смысл запустить поиск в фоновом режиме. Для этого, в конце выражения-команды, добавляем знак амперсанда &

# find /path/to/directory/ -name "*.php" -type f -exec egrep "stroka> /path/to/another/directory/search.lst /dev/null {} \; &

P.S. Возможно, в зависимости от конкретного случая, правильней будет использовать одинарные кавычки чтобы отделить выражения egrep:
# find /path/to/directory/ -name "*" -type f -exec egrep 'stroka' {} \; -print

Это поможет избежать ошибок связанных с использованием в поисковой строке специальных символов, например символа ` – т.н. гравис (grave accent).

Опубликовано 19.11.2012 в 17:24 · Автор Вебдизайнеру, сисадмину, вебмастеру · Ссылка
Рубрики: Debian, FreeBSD, Системное администрирование · Теги: , , , , , , ,