GNU grep


Введение

global regular expression print, или grep, - это мощная утилита командной строки в UNIX и Linux для поиска строк, соответствующих регулярному выражению.

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



Синтаксис

grep 'regexp' file

Эта команда ищет строки, содержащие regexp, в файле file и выводит их.

В качесте regexp можно подставить регулярное выражение.

Лучше не убирать '' — так bash точно не воспримет часть вашей регулярки в качестве глоба и передаст регулярное выражение как есть.


Флаги и Опции

grep предлагает множество флагов для настройки поиска и вывода.



Рекурсивный Поиск

Команда

grep -r 'regexp' .

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

Эта команда делает тоже самое, но раскрывает символьные ссылки:

grep -R 'regexp' .

очевидно, может зависнуть, если есть ссылка на директорию.


Контроль Совпадений

  • -i: Игнорирование регистра при поиске.
  • -v: Инвертированный поиск (вывод строк, не содержащих совпадений).
  • -w: Поиск только целых слов, соответствующих шаблону.
  • -x: Поиск строк, полностью соответствующих шаблону.


Управление Выводом

  • -c: Подсчёт количества совпадающих строк.
  • --color: Вывод совпадений с подсветкой.
  • -n: Вывод номера строки с совпадением.
  • -l: Вывод только имён файлов с совпадениями.


Контекстные Опции

  • -B: Вывод заданного количества строк перед совпадением.
  • -A: Вывод заданного количества строк после совпадения.
  • -C: Вывод заданного количества строк до и после совпадения.

Примеры

grep -i 'шаблон' файл

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

grep -C 3 'шаблон' файл

Вывод 3 строк до и после совпадения.


Комбинирование grep с другими командами

grep часто используется в сочетании с конвейерами и другими командами, такими как find, xargs.

Использование с find и xargs:

find /путь/к/каталогу -type f -name '*.txt' | xargs grep 'шаблон'

Эта команда ищет ‘шаблон’ во всех текстовых файлах в указанном каталоге.

Подсказка 💡
Не забывайте, что в именах файлов могут быть любые символы, кроме \0 и /. Именно здесь это может привести к проблемам.
Флаги -0, -printf и пр - Ваши помощники.


Переменные Окружения

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


Регулярные Выражения в grep

grep поддерживает базовые (BRE) и расширенные (ERE) регулярные выражения.

grep '^[a-zA-Z]' файл

Строки, начинающиеся с буквы.


grep '[0-9]$' файл

Строки, заканчивающиеся цифрой.


grep -E 'шаблон1|шаблон2' файл

Включили расширенные регулярные выражения.