Используйте синтаксис grep --exclude / - include, чтобы не просматривать определенные файлы - PullRequest
720 голосов
/ 21 октября 2008

Я ищу строку foo= в текстовых файлах в дереве каталогов. Это на обычной машине Linux, у меня есть оболочка bash:

grep -ircl "foo=" *

В каталогах также много бинарных файлов, которые соответствуют "foo =". Поскольку эти результаты не релевантны и замедляют поиск, я хочу, чтобы grep пропустил поиск этих файлов (в основном изображений JPEG и PNG). Как бы я это сделал?

Я знаю, что есть опции --exclude=PATTERN и --include=PATTERN, но каков формат шаблона? На странице руководства grep написано:

--include=PATTERN     Recurse in directories only searching file matching PATTERN.
--exclude=PATTERN     Recurse in directories skip file matching PATTERN.

Поиск по grep include , grep include exclude , grep exclude и варианты не нашли ничего релевантного

Если есть лучший способ поиска только в определенных файлах, я все для этого; перемещение оскорбительных файлов не вариант. Я не могу искать только определенные каталоги (структура каталогов - большой беспорядок, со всем везде). Кроме того, я ничего не могу установить, поэтому мне приходится иметь дело с обычными инструментами (такими как grep или с предложением find ).

Ответы [ 22 ]

0 голосов
/ 11 ноября 2010

Попробуйте это:

  1. Создайте папку с именем "--F" под currdir .. (или свяжите другую папку там, переименованную в "--F", то есть double-minus-F.
  2. #> grep -i --exclude-dir="\-\-F" "pattern" *
0 голосов
/ 16 сентября 2010

Чтобы игнорировать все двоичные результаты из grep

grep -Ri "pattern" * | awk '{if($1 != "Binary") print $0}'

Часть awk отфильтрует все строки двоичного файла foo match

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...