Grep исключить файлы с расширением

Обновлено: 04.07.2024

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

синтаксис --exclude идентичны.

обратите внимание, что звезда экранируется с обратной косой чертой, чтобы предотвратить ее расширение оболочкой (цитируя ее, например --include="*." , будет работать так же хорошо). В противном случае, если у вас есть файлы в текущем рабочем каталоге, соответствующие шаблону, командная строка расширится до grep pattern -r --include=foo.cpp --include=bar.h rootdir , который будет искать только файлы с именем foo.cpp и bar.h , что вполне скорее всего, не то, что ты хотел.

Если вы просто хотите пропустить двоичные файлы, я предлагаю вам посмотреть на -I (верхний регистр i) вариант. Он игнорирует двоичные файлы. Я регулярно использую следующую команду:

он выполняет рекурсивный поиск, игнорирует двоичные файлы и не просматривает скрытые папки Subversion для любого шаблона, который я хочу. У меня есть псевдоним "grepsvn" на моей коробке на работе.

пожалуйста, взгляните на ack, который предназначен именно для таких ситуаций. Ваш пример

вы также можете установить переменную среды: GREP_OPTIONS= " --exclude-dir=.svn"

Я второй буду Энди голосовать ack хотя, это лучшее.

Я нашел это через долгое время, вы можете добавить несколько включает и исключает, как:

концептуально неверно, потому что --exclude работает с базовым именем. Другими словами, он пропустит только то .svn в текущем каталоге.

в grep 2.5.1 вы должны добавить эту строку в

Я считаю, что выход greping grep иногда очень полезен:

хотя это на самом деле не останавливает его от поиска двоичных файлов.

на CentOS 6.6 / Grep 2.6.3 я должен использовать его следующим образом:

обратите внимание на отсутствие знака равенства " postinfo clearfix">

если вы не против использования find , Я люблю его -prune характеристика:

в первой строке вы указываете каталог, который хотите найти. . (текущий каталог) является допустимым путем, например.

на 2-й и 3-й линий, используйте "*.jpg" , "*.jpg" , "*.jpg" и так далее. Используйте как можно больше этих -o -name ". " -prune конструкции, как у вас шаблоны.

на 4-й строке вам нужен другой -o (это указывает "или" find ), узоры вы хотите, и вам нужно либо -print или -print0 в конце его. Если вы просто хотите "все остальное", что остается после обрезки *.jpg , *.jpg , etc. изображения, затем использовать -o -print0 и вы закончили с 4-й строкой.

наконец, на 5-й линии-это трубы xargs который для каждого из этих результирующих файлов и сохраняет их в переменной FILENAME . Затем он проходит grep the -IR флаги "pattern" , а потом FILENAME расширяется xargs стать этот список имен файлов, найденных find .

для вашего конкретного вопроса, то заявление может выглядеть примерно так:

я дилетант, конечно, но вот как мой

/.файл выглядит так:

обратите внимание, что для исключения двух каталогов мне пришлось использовать --exclude-dir дважды.

этот скрипт настолько лучше, потому что он использует "реальные" регулярные выражения, чтобы избежать поиска каталогов. просто отдельные имена папок или файлов с "\|" на grep-v

Шаблон поиска по словам Grep. Исключения каталогов и файлов.

grep - это мощный инструмент командной строки, который используется для поиска в одном или нескольких входных файлах строк, соответствующих регулярному выражению, и записывает каждую совпадающую строку в стандартный вывод.

Исключить слова и шаблоны

Чтобы отображать только те строки, которые не соответствуют поисковому шаблону, используйте параметр -v (или --invert-match ).

Например, чтобы напечатать строки, которые не содержат строку, nologin вы должны использовать:

-w Опция говорит grep вернуть только те строки , где указанная строка представляет собой целое слово (заключенные символы без слов).

По умолчанию учитывается grep регистр. Это означает, что символы верхнего и нижнего регистра рассматриваются как разные. Чтобы игнорировать регистр при поиске, вызовите grep с -i опцией.

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

Чтобы указать два или более шаблонов поиска, используйте -e опцию:

Вы можете использовать эту -e опцию сколько угодно раз.

Другой вариант исключения нескольких шаблонов поиска - объединение шаблонов с помощью оператора ИЛИ | .

В следующем примере печатаются строки, не содержащие строк nologin или bash :

GNU grep поддерживает три синтаксиса регулярных выражений: базовый, расширенный и совместимый с Perl. По умолчанию grep интерпретирует шаблон как базовое регулярное выражение, в котором метасимволы, например, | теряют свое особое значение, и вы должны использовать их версии с обратной косой чертой.

Если вы используете опцию расширенного регулярного выражения -E , то оператор | не следует экранировать, как показано ниже:

Вы можете указать различные возможные совпадения, которые могут быть буквальными строками или наборами выражений. В следующем примере games исключаются строки, в которых строка находится в самом начале строки:

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

Например, чтобы распечатать все запущенные процессы в вашей системе, кроме тех, которые выполняются как пользователь «root», вы можете отфильтровать вывод ps команды:

Исключить каталоги и файлы

Иногда при выполнении рекурсивного поиска с опциями -r или -R вы можете захотеть исключить определенные каталоги из результатов поиска.

Основное различие между параметрами -r или -R заключается в том, что когда grep вызывается с прописными буквами, R он будет следовать всем символическим ссылкам.

Чтобы исключить каталог из поиска, воспользуйтесь --exclude-dir опцией. Путь к исключенному каталогу относительно каталога поиска.

Вот пример, показывающий, как искать строку baksdev во всех файлах внутри /etc , за исключением /etc/pki каталога:

Чтобы исключить несколько каталогов, заключите исключенные каталоги в фигурные скобки и разделите их запятыми без пробелов.

Например, чтобы найти файлы , которые содержат строку «Гну» в вашей системе Linux исключая proc , boot и sys каталоги , которые вы бы запустить:

При использовании сопоставления с подстановочными знаками вы можете исключить файлы, базовое имя которых совпадает с GLOB, указанным в --exclude опции.

В приведенном ниже примере мы ищем строку во всех файлах в текущем рабочем каталоге, за baksdev исключением файлов, оканчивающихся на .jpg и .jpg :

Favorite

Добавить в избранное (1 оценок, среднее: 5,00 из 5)

Команда Pgrep в Linux

В этой статье мы покажем вам, как исключить одно или несколько слов, шаблонов или каталогов при поиске с помощью grep.

Исключить слова и шаблоны

Например, чтобы напечатать строки, которые не содержат строку, nologinвы должны использовать:

Опция -w говорит grepвернуть только те строки, где указанная строка представляет собой целое слово (заключенные символы без слов).

По умолчанию учитывается регистр grep. Это означает, что символы верхнего и нижнего регистра рассматриваются как разные. Чтобы игнорировать регистр при поиске, вызовите grep с опцией -i.

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

Чтобы указать два или более шаблонов поиска, используйте опцию -e:

Вы можете использовать опцию -e сколько угодно раз.

В следующем примере печатаются строки, не содержащие строк nologin или bash:

GNU grepподдерживает три синтаксиса регулярных выражений: базовый, расширенный и совместимый с Perl. По умолчанию grepинтерпретирует шаблон как базовое регулярное выражение, в котором метасимволы, например, | теряют свое особое значение, и вы должны использовать их версии с обратной косой чертой.

Если вы используете опцию расширенного регулярного выражения -E, то оператор | не следует экранировать, как показано ниже:

Вы можете указать различные возможные совпадения, которые могут быть буквальными строками или наборами выражений. В следующем примере исключаются строки games, в которых строка находится в самом начале строки:

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

Например, чтобы распечатать все запущенные процессы в вашей системе, кроме тех, которые выполняются от имени пользователя «root», вы можете отфильтровать вывод команды ps:

Исключить каталоги и файлы

Иногда при выполнении рекурсивного поиска с опциями -r или -R вы можете захотеть исключить определенные каталоги из результатов поиска.

Основное различие между параметрами -r или -R заключается в том, что когда grep вызывается с прописными буквами, Rон будет следовать всем символическим ссылкам.

Вот пример, показывающий, как искать строку andreyex во всех файлах внутри /etc, за исключением каталога /etc/pki:

Чтобы исключить несколько каталогов, заключите исключенные каталоги в фигурные скобки и разделите их запятыми без пробелов.

Например, чтобы найти файлы , которые содержат строку «gnu» в вашей системе Linux исключая proc, bootи sysкаталоги , которые вы бы запустить:

В приведенном ниже примере мы ищем строку во всех файлах в текущем рабочем каталоге, за исключением файлов andreyex, оканчивающихся на .jpgи .jpg:

Заключение

Команда grepпозволяет исключить шаблоны и каталоги при поиске файлов.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.


Мощь регулярных выражений в сочетании с поддерживаемыми опциями в grep делает это возможным.

Синтаксис команды

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

1. Поиск в нескольких файлах

Grep позволяет искать заданный шаблон не только в одном, но и в нескольких файлах с помощью масок (например, знака «*»):

Из приведенного вывода можно заметить, что grep печатает имя файла перед соответствующей строкой, чтобы указать местонахождение шаблона.

2. Поиск без учета регистра

G rep предлагает искать паттерн, не глядя на его регистр. Используйте флаг -i, чтобы утилита игнорировала регистр:

3. Поиск всего слова

Зачастую вместо частичного совпадения необходимо полное соответствие поисковому слову. Это можно сделать, используя флаг -w:

4. Проверка количества совпадений

Иногда вместо фактического совпадения со строкой нам необходимо количество успешных совпадений, найденных grep. Этот результат можно получить, используя опцию -c:

5. Поиск в подкаталогах

Часто требуется выполнить поиск файлов не только в текущем рабочем каталоге, но и в подкаталогах. G rep позволяет это сделать с помощью флага -r:

Как можно заметить, grep проходит через каждый подкаталог внутри текущего каталога и перечисляет файлы и строки, в которых найдено совпадение.

6. Инверсивный поиск

Если вы хотите найти что-то несоответствующее заданному шаблону, grep и это умеет при помощи флага -v:

Можно сравнить вывод команды grep по одному и тому же шаблону и файлу с флагом -v или без него. С флагом печатается каждая строка, которая не соответствует шаблону.

7. Печать номеров строк

Если хотите напечатать номера найденных строк, чтобы узнать их позицию в файле, используйте опцию -n:

8. Ограниченный вывод

Для больших файлов вывод может быть огромным и тогда вам понадобится фиксированное количество строк вместо всей простыни. Можно использовать -m[num]:

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

9. Отображение дополнительных строк

Иногда необходимо вывести не только строки по некоторому шаблону, но и дополнительные строки выше или ниже найденных для понимания контекста. Можно напечатать строку выше, ниже или оба варианта, используя флаги -A, -B или -C со значением num (количество дополнительных строк, которые будут напечатаны). Это применимо ко всем совпадениям, которые grep находит в указанном файле или в списке файлов.

Ниже показан обычный вывод grep , а также вывод с флагами. Обратите внимание, как grep интерпретирует флаги и их значения, а также изменения в соответствующих выходных данных:

  • с флагом -A1 выведется 1 строка, следующая за основной;
  • -B1 напечатает 1 строку перед основной;
  • -C1 выведет по одной строке снизу и сверху.

10. Список имен файлов

Чтобы напечатать только имя файлов, в которых найден шаблон, используйте флаг -l:

11. Точный вывод строк

Если необходимо напечатать строки, которые точно соответствуют заданному шаблону, а не какой-то его части, применяйте в команде ключ -x:

В приведенном ниже примере file.txt содержится слово «support», а строки без точного совпадения игнорируются.

12. Совпадение по началу строки

Используя регулярные выражения, можно найти начало строки:

Обратите внимание, как использование символа «^» изменяет выходные данные. Знак «^» указывает начало строки, т.е. ^It соответствует любой строке, начинающейся со слова It. Заключение в кавычки может помочь, когда шаблон содержит пробелы и т. д.

13. Совпадение по концу строки

Эта полезная регулярка способна помочь найти по шаблону конец строки:

Обратите внимание, как меняется вывод, когда мы сопоставляем символ «.» и когда используем «$», чтобы сообщить утилите о строках, заканчивающихся на «.» (без тех, которые могут содержать символ посередине).

14. Файл шаблонов

Если у вас есть некий список часто используемых шаблонов, укажите его в файле и используйте флаг -f. Файл должен содержать по одному шаблону на строку.

В примере мы создали файл шаблонов pattern.txt с таким содержанием:

Чтобы это использовать, применяйте ключ -f:

15. Указание нескольких шаблонов

G rep позволяет указать несколько шаблонов с помощью -e:

16. Расширенные выражения

G rep поддерживает расширенные регулярные выражения или ERE (похожие на egrep) с использованием флага -E.

Использование ERE имеет преимущество, когда вы хотите рассматривать мета-символы как есть и не хотите заменять их строками. Использование -E с grep эквивалентно команде egrep.

Заключение

Приведенные выше примеры – лишь верхушка айсберга. G rep поддерживает целый ряд опций и может оказаться полезным инструментом в руках специалиста, который способен эффективно его использовать. Мы можем не только взять на вооружение приведенные выше примеры, но и комбинировать их, чтобы получить требуемый результат в различных условиях.

Для дальнейшего изучения утилиты и расширения кругозора стоит почитать мануал, выполнив в терминале команду man grep, или посетить страницу с официальной документацией .

Читайте также: