Строгий поиск. Пример строгого (опция w) поиска последовательности символов DEADBEEF по содержимому всех файлов в текущем каталоге и в его подкаталогах (опция r), с отображением номера строки, где встретилась эта последовательность (опция n). Строгий поиск означает, что будут выведены только те результаты, где указанная последовательность точно совпадает со словом, но не с частью слова:
$ grep -rnw DEADBEEF
Нестрогий поиск. Без опции w тот же пример выдаст результаты, где указанная последовательность совпадает как полностью со словом, так и с частью слова. Таким образом, будут выведены также результаты совпадений, где содержится, к примеру, слово 0xDEADBEEF:
$ grep -rn DEADBEEF
Опция l. Указать только имена файлов без результатов совпадения можно, если указать опцию l (маленькая L):
$ grep -rnwl DEADBEEF
Поиск в определенном каталоге и его подкаталогах. Следующий пример начнет поиск слова USB в файлах каталога /var/log и его подкаталогах:
$ grep -rnw USB /var/log
Поиск только в определенных файлах. С помощью опции --include="фильтр" можно ограничить поиск только определенными файлами. Например, вот так можно искать строку "sprintf" только в заголовочных файлах:
$ grep --include="*.h" -rnw sprintf
А как искать слова со спецсимволами? Предположим, нужно найти вхождение последовательности символов -lmpsse, для этого нужно применить двойные кавычки, и для символа '-' применить экранирование. Иначе символ дефиса будет принят как часть регулярного выражения.
$ grep -rnw "\-lmpsse"
[Совместное использование find и grep]
Например, следующая команда выводит список скриптов, в содержимом которых содержится слово test (поиск стартует рекурсивно с корневого каталога):
# find / -name "*.sh" | grep test
Комментарии
microsin: grep всего лишь придуман для обработки и фильтрации строк. Для этой цели (вместо grep) в Python лучше использовать регулярные выражения (Regular Expressions, RegEx). С помощью регулярных выражений в Python Вы сможете сделать все то же самое, что можно делать с помощью grep. Кстати, grep в своих фильтрах также использует регулярные выражения.
Например вот так:
# find / -name "*.sh" - exec grep test {} /;
# find / -name "*.sh" | grep test
Нужно вывести все файлы, где встречается заданное слово. Подскажите как сделать?
RSS лента комментариев этой записи