Grep исключить файлы с расширением
Я ищу строку 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 - это мощный инструмент командной строки, который используется для поиска в одном или нескольких входных файлах строк, соответствующих регулярному выражению, и записывает каждую совпадающую строку в стандартный вывод.
Исключить слова и шаблоны
Чтобы отображать только те строки, которые не соответствуют поисковому шаблону, используйте параметр -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 :
В этой статье мы покажем вам, как исключить одно или несколько слов, шаблонов или каталогов при поиске с помощью 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, или посетить страницу с официальной документацией .
Читайте также: