Введение

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

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

Синтаксис

grep 'regexp' file

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

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

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

Флаги и Опции

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 и конвейеры (pipes).

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

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

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

Напоминание

Не забывайте про 3.3.2.3 Необычные символы в именах файлов.

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

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

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

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

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

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


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

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


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

Использование расширенных регулярных выражений.


grep -f шаблоны.txt файл

Чтение шаблонов из файла.