yandex
Калькулятор ценТарифыАкцииДокументацияО насКарьера в Cloud.ruНовостиЮридические документыКонтактыРешенияРеферальная программаКейсыПартнерство с Cloud.ruБезопасностьEvolutionAdvancedEvolution StackОблако VMwareML SpaceВ чем отличия платформ?БлогОбучение и сертификацияМероприятияИсследования Cloud.ruЛичный кабинетВойтиЗарегистрироватьсяEvolution ComputeEvolution Managed KubernetesEvolution Object StorageEvolution Managed PostgreSQL®Облако для мобильных и веб‑приложенийАналитика данных в облакеEvolution Bare MetalEvolution SSH KeysEvolution ImageСайт в облакеEvolution DNSEvolution VPCEvolution Load BalancerEvolution Magic RouterEvolution DiskХранение данных в облакеEvolution Container AppsEvolution Artifact RegistryEvolution Managed ArenadataDBEvolution Managed TrinoEvolution Managed SparkАналитика данных в облакеEvolution ML InferenceEvolution Distributed TrainEvolution ML FinetuningEvolution NotebooksCurator Anti-DDoSCurator Anti‑DDoS+WAFUserGate: виртуальный NGFWStormWall: Anti-DDoSEvolution TagsEvolution Task HistoryCloud MonitoringCloud LoggingАренда GPUAdvanced Object Storage ServiceAdvanced Elastic Cloud ServerAdvanced Relational Database Service for PostgreSQLРазработка и тестирование в облакеAdvanced Image Management ServiceAdvanced Auto ScalingDirect ConnectCDNCross-platform connectionAdvanced Enterprise RouterAdvanced Cloud Backup and RecoveryAdvanced Data Warehouse ServiceAdvanced Elastic Volume ServiceAdvanced Cloud Container EngineAdvanced FunctionGraphAdvanced Container Guard ServiceAdvanced Software Repository for ContainerAdvanced Document Database Service with MongoDBAdvanced Relational Database Service for MySQLAdvanced Relational Database Service for SQL ServerCloud AdvisorAdvanced Server Migration ServiceAdvanced Data Replication ServiceAdvanced API GatewayAdvanced CodeArtsAdvanced Distributed Message Service for KafkaAdvanced Distributed Message Service for RabbitMQAdvanced DataArts InsightAdvanced CloudTableAdvanced MapReduce ServiceAdvanced Cloud Trace ServiceAdvanced Application Performance ManagementAdvanced Identity and Access ManagementAdvanced Enterprise Project Management ServiceVMware: виртуальный ЦОД с GPUVMware: виртуальный ЦОДУдаленные рабочие столы (VDI)VMware: сервер Bare MetalИнфраструктура для 1С в облакеУдаленные рабочие столыМиграция IT‑инфраструктуры в облако3D-моделирование и рендерингVMware: резервное копирование виртуальных машинVMware: резервный ЦОДVMware: резервное копирование в облакоVMware: миграция виртуальных машин
Поиск
Связаться с нами

Команда grep в Linux: как искать строки и шаблоны

Чтобы быстро находить ошибки и отслеживать предупреждения в лог-файлах Linux-приложений или самой системы, администраторы и разработчики используют команду grep. Она упрощает просмотр и анализ логов, позволяя эффективно искать и обрабатывать текстовые шаблоны в файлах. В этой статье рассмотрим задачи, которые можно решать с помощью grep. 

Инструкции
Иллюстрация для статьи на тему «Команда grep в Linux: как искать строки и шаблоны»
Продукты из этой статьи:
Иконка-Evolution Image
Evolution Image
Иконка-Evolution Object Storage
Evolution Object Storage
Иконка-Evolution Compute
Evolution Compute

Синтаксис команды grep

Основной синтаксис команды grep выглядит следующим образом:

Дарим до 20 000 бонусов
Дарим до 20 000 бонусов
4 000 бонусов — физическим лицам, 20 000 бонусов — юридическим

В нее входят: 

  • [опции] — флаги командной строки, которые изменяют поведение grep;

  • шаблон — регулярное выражение, которое нужно найти;

  • [<путь к файлу или папке>] — имя одного или нескольких файлов, в которых необходимо выполнить поиск. 

Как применять команду grep в Linux

Приведем примеры использования grep на практике, а также обсудим, какие флаги командной строки используются:

  • -i — ищем строку без учета регистра в указанном файле. Например, найдем строки с  UNIX, Unix, unix командой: 

Использование опции -iИспользование опции -i
  • -c — находим количество строк, которые соответствуют заданному шаблону: 

  • -l — отображаем файлы, которые содержат заданную строку или шаблон: 

  • -w — по умолчанию grep сопоставляет нужную строку, даже если она найдена как подстрока в файле. А параметр -w позволяет отображать только целые слова: 

Применение параметра -wПрименение параметра -w
  • -o — по умолчанию grep показывает всю строку, которая совпала по запросу. Но при помощи опции -o можно выбрать только определенное словосочетание: 

  • -n — отображаем номер строки файла с совпавшей строкой: 

  • -v — находим строки, которые не соответствуют указанному шаблону строки поиска: 

  • ^ — этот параметр определяет начало строки. В grep его можно использовать для сопоставления строк, которые начинаются с заданного шаблона: 

  • — используется как якорь конца строки, позволяя искать строки, заканчивающиеся на определенный шаблон или набор символов: 

  • -e — задаем выражение с этой опцией, которое можно использовать несколько раз: 

  • -f — берем шаблоны из файла по одному на строку:

  • «-A», «-B», «-C» — извлекаем строку с текстовым совпадением, включая некоторое количество строк (n), предшествующих и следующих за ней:

-A — строки после вхождения;

-B — строки до вхождения;

-C — строки до и после вхождения.

В итоге команда может выглядеть так:

  • -R (или -r) — ищем текстовое вхождение во всех файлах внутри директории и ее поддиректорий.

При этом:

  • --color позволяет отображать вывод в цвете и упрощает чтение кода.

Применение опции --colorПрименение опции --color
Дарим 20 000 бонусов юридическим лицам и ИП
Дарим 20 000 бонусов юридическим лицам и ИП
Хватит для развертывания сайта или запуска проекта
Получить бонусы

В дополнение к красному по умолчанию для вывода можно определять цвета с помощью переменной оболочки GREP_COLOR. 

Сохранение вывода grep в файл

Допустим, вам необходимо выполнить поиск по ключевому слову cloud и сохранить вывод в файле с именем my-cloud.txt. Тогда вводим такую команду: 

Также можно выполнить ограниченный поиск, включив в него строки, которые начинаются с ключевого cloud:

Поиск специальных символов с помощью grep

Если нужно найти определенный символ, можно попросить grep обрабатывать ваш ввод как фиксированную строку с помощью опции -F или команды fgrep. 

Например:

Подавление сообщений об ошибках

С помощью grep можно не выводить на экран ошибки о несуществующих или нечитаемых файлах через использование параметра -s:

Например:

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

Регулярные выражения — инструмент для определения общих шаблонов поиска, расширяющий спектр возможностей обработки текстовой информации. Они  представляют собой некую последовательность символов. Например, ^w1, w1|w2, [^ ], foo, bar, [0-9].

Команда grep располагает базовыми и расширенными выражениями:

  1. Базовые (BRE) выражения предоставляют набор символов: ., *, [], [^], ^ и $.

  2. Расширенные (ERE) выражения в дополнение к базовым поддерживают следующие символы: +, ?,{n,m},|.

Основные регулярные выражения:

Параметр

Что означает

.

Соответствует любому отдельному символу

?

Предыдущий элемент — необязательный и будет сопоставлен максимум один раз

*

Предыдущий элемент будет совпадать ноль или более

раз

+

Предыдущий элемент будет сопоставлен один или несколько

раз

{N}

Предыдущий элемент совпадает ровно N раз

{N,}

Предыдущий элемент совпадает N или более раз

{N,M}

Предыдущий элемент совпадает не менее N раз, но не более M раз

-

Представляет диапазон, если он не является первым или

последним в списке, или конечной точкой диапазона в списке

^

Соответствует пустой строке в начале строки. Также представляет символы, не входящие в диапазон списка

$

Соответствует пустой строке в конце строки

\b

Соответствует пустой строке на окончании слова

\B

Соответствует пустой строке, если она не находится на окончании слова

\<

Найти пустую строку в начале слова

\>

Найти пустую строку в окончании слова

Примеры регулярных выражений grep

Чтобы продемонстрировать, как работают регулярные выражения grep, найдем слово с именем cloud в файле /etc/passwd:

Как вывод получим:

Далее найдем слово с именем cloud в любом регистре: 

И после этого выполним поиск двух слов clou» или raj в любом регистре:

Теперь найдем слова Linux или UNIX в любом регистре с применением команды egrep:

Важно учесть, что последняя версия egrep покажет предупреждение, что команда устарела и нужно использовать grep -E. Чтобы этого избежать, следует обновить скрипты и команды. Правильный запрос будет выглядеть так: 

Как сопоставить отдельные символы

Символ . (точка) соответствует одному элементу. То есть его можно использовать в качестве замены любого другого символа. 

Чтобы показать, как это выглядит на практике, возьмем файл demo.txt:

Найдем все имена файлов, которые начинаются с purchase: 

После чего выделим все имена файлов, которые начинаются с purchase и заканчиваются на db: 

А также, для примера, найдем все имена файлов, которые начинаются с purchase, но заканчиваются на db: 

Список файлов с определенным началом имени и окончаниемСписок файлов с определенным началом имени и окончанием

Как сопоставить только точку (.)

Точка играет особую роль в регулярных выражениях, так как соответствует любому символу. Однако, если необходимо не заменять, а искать именно фактическую точку, можно воспользоваться опцией экранирования. 

Для этого перед . нужно поставить обратную косую черту \:

Сопоставление только точкиСопоставление только точки

Как использовать якоря

Чтобы заставить регулярное выражение сопоставлять только начало или конец строки, можно применять якоря ^ и $. Чтобы отобразить строки, которые начинаются с cloud, нужно ввести: 

Примеры выходных данных:

Также можно отобразить только строки, которые начинаются со слова cloud, то есть не выводить cloudgite, cloudg и т.д.: 

Как сопоставить набор символов с помощью grep

Так как точка . соответствует любому отдельному символу, с помощью grep можно сопоставлять определенные символы и их диапазоны. Представим, что необходимо сопоставить Vivek и vivek: $ grep '[vV]ivek' filename или $ grep '[vV][iI][Vv][Ee][kK]' filename

Сопоставим цифры и символы верхнего и нижнего регистра. Например, попробуем посчитать слова, такие как vivek1, Vivek2 и так далее, с помощью:

Или сопоставив foo11, foo12, foo22 через:

Также можно использовать не только цифры, но и буквы: $ grep '[A-Za-z]' filename.

Например, отобразим все строки, в которых содержатся символы w или n: 

Какие универсальные символы существуют

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

Поиск по шаблону с символом -

Найдем все строки, которые соответствуют –test– с использованием опции -e Без нее grep попытается проанализировать –test– как список опций. Например:

$ grep -e '--test--' filename

Операция OR

Если необходимо сопоставить несколько текстовых выражений, можно применить опцию OR. Используем следующий синтаксис:

Операция AND

Используем следующий синтаксис для отображения всех строк, в которых содержатся как word1, так и word2: 

Как проверить последовательность

Чтобы проверить, как часто символ должен повторяться в последовательности, используйте следующий синтаксис: {N}, {N,}, {min,max}.

Например:

  • Сопоставляем символ v два раза: 

  • Следующий пример будет соответствовать как словам co», так и cool: 

  • Этот пример будет соответствовать любой строке из как минимум трех букв c:

Коротко о команде grep в Linux

В комьюнити разработчиков распространено слово «грепать» — то есть искать какое-либо регулярное выражение в большом объеме файлов. Делать это позволяет универсальная утилита grep, которую можно применять для работы с любыми доступными в Cloud.ru Linux-дистрибутивами

Владение grep помогает искать файл с конкретной строкой в файловой системе или, наоборот, строки в файле, где содержатся определенные символы. А комбинируя все ее функциональные возможности, можно решать самые разные задачи поиска.

Продукты из этой статьи:
Иконка-Evolution Image
Evolution Image
Иконка-Evolution Object Storage
Evolution Object Storage
Иконка-Evolution Compute
Evolution Compute
13 февраля 2025

Вам может понравиться