grep
— это мощный инструмент командной строки, который позволяет вам искать в одном или нескольких входных файлах строки, соответствующие регулярному выражению, и записывать каждую совпадающую строку в стандартный вывод.
В этой статье мы покажем вам, как использовать GNU grep
для поиска нескольких строк или шаблонов.
Содержание
Grep несколько шаблонов
GNU grep
поддерживает три синтаксиса регулярных выражений: базовый, расширенный и Perl-совместимый. Если тип регулярного выражения не указан, grep
интерпретирует шаблоны поиска как базовые регулярные выражения.
Для поиска нескольких шаблонов используйте оператор OR (чередование).
Оператор чередования |
(pipe) позволяет вам указать различные возможные совпадения, которые могут быть буквальными строками или наборами выражений. Этот оператор имеет самый низкий приоритет среди всех операторов регулярных выражений.
Синтаксис поиска нескольких шаблонов с использованием базовых регулярных выражений grep
следующий:
grep 'pattern1|pattern2' file...
Всегда заключайте регулярное выражение в одинарные кавычки, чтобы избежать интерпретации и расширения метасимволов оболочкой.
При использовании основных регулярных выражений метасимволы интерпретируются как буквальные символы. Чтобы сохранить особые значения метасимволов, они должны быть экранированы обратной косой чертой ( ). Вот почему мы избегаем оператора ИЛИ (
|
) косой чертой.
Чтобы интерпретировать шаблон как расширенное регулярное выражение, вызовите grep
с параметром -E
(или --extended-regexp
). При использовании расширенного регулярного выражения не избегайте символа |
оператор:
grep -E 'pattern1|pattern2' file...
Для получения дополнительной информации о том, как создавать регулярные выражения, ознакомьтесь с нашей статьей Grep regex .
Grep несколько строк
Буквальные строки — это самые простые шаблоны.
В следующем примере мы ищем все вхождения слов fatal
, error
и critical
в файле ошибок журнала Nginx :
grep 'fatal|error|critical' /var/log/nginx/error.log
Если искомая строка содержит пробелы, заключите ее в двойные кавычки.
Вот тот же пример с использованием расширенного регулярного выражения, которое избавляет от необходимости экранировать оператор |
grep -E 'fatal|error|critical' /var/log/nginx/error.log
По умолчанию grep
чувствителен к регистру. Это означает, что символы верхнего и нижнего регистра рассматриваются как разные.
Чтобы игнорировать регистр при поиске, вызовите grep with
параметром -i
(или --ignore-case
):
grep -i 'fatal|error|critical' /var/log/nginx/error.log
При поиске строки grep
отобразит все строки, в которых строка встроена в строки большего размера. Поэтому, если вы искали «error», grep
также напечатает строки, где «error» встроено в слова большего размера, например, «errorless» или «antiterrorists».
Чтобы вернуть только те строки, в которых указанная строка представляет собой целое слово (заключенное в символы, отличные от слов), используйте параметр -w
(или --word-regexp
):
grep -w 'fatal|error|critical' /var/log/nginx/error.log
Символы слова включают буквенно-цифровые символы (az, AZ и 0–9) и символы подчеркивания (_). Все остальные символы считаются несловесными символами.
Чтобы узнать больше о параметрах grep
, посетите нашу статью Команда Grep .
Выводы
Мы показали вам, как использовать grep
для поиска нескольких шаблонов, строк и слов.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.