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 для поиска нескольких шаблонов, строк и слов.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.