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

Отрицательное совпадение в grep

• 4 min read • Linux • Обновлено 18 Nov 2025
grep: отрицательное совпадение (-v, -L)
grep: отрицательное совпадение (-v, -L)

Bash-оболочка, терминал

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

  • Отрицательное совпадение с grep
  • Отрицательное совпадение для имён файлов

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

Отрицательное совпадение с grep

Чтобы инвертировать совпадение в grep, используйте флаг -v или полную форму:

--invert-match

Это заставит grep печатать только те строки, которые не соответствуют заданному шаблону:

grep -v "bar" file

Пример вывода grep с опцией -v, показывающий строки без совпадений

Важно: при инверсии совпадения опция -o (печатать только совпавшие фрагменты) не имеет смысла — ведь совпадений нет. grep пропускает строку при любом совпадении; если в строке есть хотя бы одно совпадение, строка будет исключена из вывода.

Это работает и с регулярными выражениями. Например:

grep -v "foo ba[rz]" file

Хотя существуют более сложные регулярные приёмы для выражения «не совпадает», обычно проще и понятнее инвертировать результат с помощью -v.

Альтернатива на awk:

awk '!/bar/' file

Иллюстрация сравнения поведения grep и awk при инверсии совпадений

Отрицательное совпадение для имён файлов

Флаг -l печатает имена файлов, где есть совпадения вместо самих строк. Обратный вариант — -L — печатает имена файлов, которые НЕ содержат совпадение:

grep -L "bar" ./*.txt

Не используйте одновременно -v и -L, иначе получится двойная инверсия, и результат будет не совпадать с ожидаемым.

Частые ошибки и когда инверсия не помогает

  • Двоичная или сжатая часть файла: grep может пропустить то, что вы ожидаете. Используйте –binary-files=text или фильтруйте по расширению.
  • Поиск по словам: если нужно исключить целое слово, используйте границы слова (-w) вместе с -v.
  • Многофайловый вывод: при большом числе файлов лучше применять -r или –exclude-dir, чтобы избежать лишней рекурсии.
  • Если нужно исключить строки по нескольким шаблонам, комбинируйте с -E или используйте файл шаблонов (-f).

Полезные примеры

Показать все строки, не содержащие «TODO» (чувствительность к регистру):

grep -v "TODO" project/*.md

Показать все строки, не содержащие «error» независимо от регистра:

grep -vi "error" logfile

Исключить строки, содержащие любое из нескольких слов:

grep -vE "(debug|trace|verbose)" app.log

Исключить файлы, которые не содержат шаблон в дереве каталогов:

grep -rL "TODO" src/

Альтернатива — быстрый поиск с ripgrep (rg):

rg -v "pattern"

rg по умолчанию быстрее в больших репозиториях и умеет игнорировать .gitignore.

Методология применения (мини-процесс)

  1. Определите шаблон, который нужно исключить.
  2. Проверьте чувствительность к регистру и необходимость границ слова.
  3. Запустите grep -v сначала на тестовом файле.
  4. При положительном результате масштабируйте команду на каталог с -r или шаблоном файлов.
  5. При больших наборах данных подумайте об rg или awk для производительности.

Контрольный список для системного администратора

  • Шаблон проверен на тестовом файле.
  • Указан правильный флаг регистра (-i) при необходимости.
  • Если нужно — исключены бинарные файлы.
  • Для рекурсивного поиска задана корректная глубина или исключения.
  • Нет одновременного использования -v и -L.

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

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

Краткая памятка по синтаксису

  • -v, –invert-match — инвертировать совпадение
  • -L — показать файлы, не содержащие совпадений
  • -l — показать файлы, содержащие совпадения
  • -i — игнорировать регистр
  • -E — расширенные регулярные выражения

Решение задач: быстрый диаграмм выбора

flowchart TD
  A[Нужны строки без шаблона?] -->|Да| B{Требуется список файлов?}
  B -->|Да| C[Используйте grep -L]
  B -->|Нет| D[Используйте grep -v]
  A -->|Нет| E[Обычный grep]

Глоссарий

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

Итог

  • -v инвертирует совпадение и выводит строки без шаблона.
  • -L печатает имена файлов без совпадений.
  • Для производительных или сложных сценариев рассмотрите rg, awk или составные регулярные выражения.

Важно: не комбинируйте -v и -L — это приведёт к двойной инверсии и неожидаемому результату.

Summary:

  • grep -v фильтрует строки, не содержащие шаблон.
  • grep -L выводит файлы без совпадений.
  • Проверяйте регистр и тип файлов при применении команд.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро