Гид по технологиям

Как исключать файлы и шаблоны при поиске с grep

6 min read Linux Обновлено 27 Dec 2025
Исключение файлов и шаблонов при поиске с grep
Исключение файлов и шаблонов при поиске с grep

Ноутбук с Linux и приглашением bash

grep — мощный инструмент поиска по тексту. Если результаты слишком шумные, исключайте строки, файлы и каталоги с помощью опций -v, -e, –exclude и –exclude-dir. В статье — подробные примеры, набор приёмов, чек-листы и короткая методика для безопасного поиска.

Быстрые ссылки

  • Команда grep
  • Исключение шаблонов
  • Исключение файлов
  • Исключение каталогов
  • Иногда важно то, что вы не ищете

Введение в grep

grep — это утилита для поиска текстовых строк, соответствующих регулярным выражениям или простым строкам. Регулярное выражение — строка, которая описывает набор шаблонов.

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

История: команда появилась ещё в Unix в начале 1970‑х годов. Название происходит от последовательности g/re/p в редакторе ed и означает “g — глобально, re — регулярное выражение, p — печать”.

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

Следующие разделы показывают, как сужать область поиска.

Исключение шаблонов

Цель: найти строки, которые соответствуют одному шаблону, но исключить строки, содержащие другой шаблон.

Опция -v инвертирует совпадение — выводит строки, которые не соответствуют шаблону.

Пример: поиск строк, где встречается “Jabberwock”:

cat jabberwocky.txt | grep "Jabberwock"

Или эквивалентно:

grep "Jabberwock" jabberwocky.text

Если вы хотите вывести все строки, которые НЕ содержат “Jabberwock”:

grep -v "Jabberwock" jabberwocky.text

Две разных команды для поиска по одному файлу с помощью grep

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

grep -v -e "Jabberwock" -e "and" jabberwocky.txt

Альтернативно, с расширенными регулярными выражениями (-E) можно объединить шаблоны через логический OR (|):

grep -Ev "Jabberwock|and" jabberwocky.txt

Регулярные выражения позволяют формулировать условия сложнее. Пример: исключить строки, начинающиеся с любой буквы из набора ACHT:

grep -Ev "^ACHT" jabberwocky.txt

Чтобы фильтровать по нескольким шагам, можно пропустить вывод одного grep в другой (конвейер): сначала оставляем строки, содержащие “Jabberwock”, затем отфильтровываем те, где встречается “slain”:

grep "Jabberwock" jabberwocky.txt | grep -v "slain"

Соединение двух команд grep для двойной фильтрации

Важно

  • Помните о регистре символов: grep чувствителен к регистру по умолчанию. Для нечувствительного поиска добавьте -i.
  • Используйте кавычки вокруг шаблонов, чтобы оболочка не интерпретировала метасимволы.

Пример: нечувствительный поиск и исключение одновременно:

grep -i -v -e "error" -e "deprecated" *.log

Исключение файлов

Когда нужно искать в наборе файлов, удобно использовать маски (wildcards). Но маски могут захватывать файлы, которые вы не хотите проверять.

Пример, где перечислены несколько файлов вручную:

grep "vorpal" verse-1.txt verse-2.txt verse-3.txt verse-4.txt verse-5.txt verse-6.txt

Чтобы не перечислять файлы, используют маску:

grep "vorpal" *.txt

Проблема: в каталоге есть другие .txt файлы — например логи или конфигурации — и маска вернёт много ложных срабатываний. Слово “sword” может быть частью слова “password”.

Большой поток ложных совпадений при поиске

Решение — опция –exclude для исключения файлов по шаблону имени. Пример: исключаем один файл:

grep --exclude=vol-log-1.txt "sword" *.txt

Или исключаем все файлы, начинающиеся с “vol”:

grep --exclude=vol*.txt "sword" *.txt

Для рекурсивного поиска по дереву каталога используйте -R или -r. Тогда полезно исключать целые группы файлов по расширению:

grep -R --exclude=*.{csv,md} --exclude={vol*,log*}.txt "sword" /home/dave/data/

Использование нескольких опций --exclude и групп имен файлов

Советы по маскам

  • Обёрните шаблон в кавычки, если оболочка интерпретирует фигурные скобки.
  • Используйте фигурные скобки для компактной записи нескольких расширений: –exclude=*.{log,tmp,cache}

Исключение каталогов

Если ненужные файлы сгруппированы в каталоги, лучше исключить целые каталоги.

Пример: исключаем каталог backup из рекурсивного поиска:

grep -R --exclude-dir=backup "vorpal" /home/dave/data

Исключение каталога из поиска

Можно указывать несколько каталогов:

grep -R --exclude-dir=backup --exclude-dir=backup2 "vorpal" /home/dave/data

Или короче:

grep -R --exclude-dir={backup,backup2} "vorpal" /home/dave/data

Комбинация исключений файлов и каталогов

grep -R --exclude=*.{csv,md} --exclude-dir=backup/archive "frumious" /home/dave/data

Исключение типов файлов и каталогов в одной команде

Важно

  • Пути в –exclude-dir давайте относительно каталога, откуда начинается поиск, а не абсолютные пути от корня.
  • –exclude и –exclude-dir учитываются только при рекурсивном поиске (-R/-r).

Когда исключения приводят в заблуждение (когда метод не подходит)

Контрпример: если в каталоге backup есть важные файлы, которые вы всё же хотите проверить, исключение каталога приведёт к пропуску нужных совпадений. Перед массовыми исключениями сделайте сухой прогон (без изменений) и проверьте, не скрываете ли вы важные данные.

Альтернатива: сначала запустите grep с –include, чтобы явно указать интересующие расширения, вместо исключения множества неизвестных типов.

grep -R --include=*.{txt,md,conf} "ключевое_слово" /home/dave/data

Практическая краткая методика (мини‑методология)

  1. Определите цель поиска и ключевые шаблоны.
  2. Сначала выполните узкий поиск по одному небольшому каталогу. Оцените результаты.
  3. Добавьте –include для уточнения типов файлов, если нужно.
  4. Добавьте –exclude/–exclude-dir для фильтрации шума.
  5. Повторите поиск с -n (номер строки) и –color для чтения вывода.
  6. Если используете команды в скриптах — явно экранируйте шаблоны и проверяйте список файлов перед выполнением.

Шпаргалка команд (cheat sheet)

  • Поиск в файле:
grep "pattern" file.txt
  • Инверсия совпадения (искать НЕ pattern):
grep -v "pattern" file.txt
  • Несколько шаблонов (каждый через -e):
grep -e "one" -e "two" files
  • Объединение с расширенными регэкспами:
grep -E "one|two" files
  • Рекурсивно с исключением типов файлов:
grep -R --exclude=*.{csv,md} "pattern" /path
  • Исключить каталог:
grep -R --exclude-dir={dir1,dir2} "pattern" /path
  • Только печатать имена файлов с совпадениями:
grep -Rl "pattern" /path
  • Показать номера строк:
grep -n "pattern" file

Чек-листы по ролям

Администратор системы

  • Перед рекурсивным поиском проверьте список директорий.
  • Используйте –exclude-dir для временных каталогов и backup.
  • Добавляйте –exclude=*.log при работе с конфиденциальными логами.

Разработчик

  • Используйте –include для исходников (.c, .py, .js).
  • Применяйте -n и –color для удобного просмотра.
  • При сложных шаблонах тестируйте их отдельно через regex101 или аналог.

Аналитик данных

  • Ограничьте поиски по расширению: –include=*.csv
  • Применяйте -i для нечувствительного поиска по данным.
  • Экспортируйте результаты в файл и анализируйте в pandas/R.

Критерии приёмки

  • Команда должна находить все ожидаемые совпадения в тестовом наборе.
  • Команда не должна возвращать строки из исключённых файлов или каталогов.
  • Рекурсивный поиск не должен заходить в указанные –exclude-dir.
  • Для автоматизированных сценариев результат должен быть детерминирован и документирован.

Модели мышления и эвристики

  • “Сначала сузьте область, потом расширяйте”: сначала ограничьте типы файлов, затем добавляйте исключения.
  • “Белый список лучше чёрного списка”: указывайте –include, если известно, какие расширения нужны.
  • “Делайте сухой запуск”: сначала запустите команду с –no-messages/без изменений и просмотрите результаты.

Короткая галерея пограничных случаев

  • Файлы со сжатым содержимым (.gz): grep по умолчанию не распакует, используйте zgrep или распаковку.
  • Бинарные файлы: grep может сообщить “Binary file matches”. Добавьте -a для обработки как текста.
  • Очень большие файлы: grep быстрый, но считывание диска — узкое место; параллелизация или индексация (ripgrep) помогут.

Безопасность и приватность

  • Не оставляйте в логах пароли и токены. grep найдёт и выведет их в вывод команды.
  • При автоматизации убирайте вывод с чувствительными данными или фильтруйте его перед записью в общедоступные места.

Факты и полезные числа

  • Год появления: 1974 (ранние 1970‑е в Unix).
  • grep остаётся стандартным инструментом на большинстве Unix-подобных систем.

1‑строчный глоссарий

  • REGEX: сокращение от regular expression — текстовый шаблон для поиска.
  • -v: опция инверсии совпадения — возвращает строки, где шаблон НЕ найден.
  • –exclude: исключает файлы по шаблону имени.
  • –exclude-dir: исключает каталоги из рекурсивного поиска.

Примечание

Если вам нужен ещё более быстрый и дружелюбный инструмент с включёнными по умолчанию многими исключениями, рассмотрите ripgrep (rg). Он совместим по синтаксису с grep в базовых сценариях, но часто работает быстрее и удобнее при рекурсивных поисках.

Сводка

  • grep мощен, но по умолчанию охватывает всё; это может породить шум.
  • Используйте -v и -e для исключения строк по шаблону.
  • Применяйте –exclude и –exclude-dir для фильтрации файлов и каталогов при рекурсивном поиске.
  • Предпочитайте белые списки (–include) при возможности. Всегда делайте проверочный запуск перед массовыми операциями.

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

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Воспроизвести звук с ПК через Sonos
Аудио

Воспроизвести звук с ПК через Sonos

Как создать игру «Память» на Python и Tkinter
Python

Как создать игру «Память» на Python и Tkinter

Как безопасно удалить данные из умных устройств
Безопасность

Как безопасно удалить данные из умных устройств

PowerToys: Mouse Without Borders и Peek в Windows 11
Windows

PowerToys: Mouse Without Borders и Peek в Windows 11

Темы Windows 11 — установка и настройка
Персонализация

Темы Windows 11 — установка и настройка

Как изменить статус в Slack
Инструменты

Как изменить статус в Slack