
Команда grep в Linux: как искать строки и шаблоны
Статья
Время чтения
7 минут
Чтобы быстро находить ошибки и отслеживать предупреждения в лог-файлах Linux-приложений или самой системы, администраторы и разработчики используют команду grep. Она упрощает просмотр и анализ логов, позволяя эффективно искать и обрабатывать текстовые шаблоны в файлах. В этой статье рассмотрим задачи, которые можно решать с помощью grep.
Синтаксис команды grep
Основной синтаксис команды grep выглядит следующим образом:
grep [опции] шаблон [<путь к файлу или папке>]
В нее входят:
[опции] — флаги командной строки, которые изменяют поведение grep;
шаблон — регулярное выражение, которое нужно найти;
[<путь к файлу или папке>] — имя одного или нескольких файлов, в которых необходимо выполнить поиск.
Как применять команду grep в Linux
Приведем примеры использования grep на практике, а также обсудим, какие флаги командной строки используются:
-i — ищем строку без учета регистра в указанном файле. Например, найдем строки с UNIX, Unix, unix командой:
grep -i "UNix" geekfile.txt.

-c — находим количество строк, которые соответствуют заданному шаблону:
grep -c "unix" geekfile.txt.
-l — отображаем файлы, которые содержат заданную строку или шаблон:
grep -l "unix" * или grep -l "unix" f1.txt f2.txt f3.xt f4.txt.
-w — по умолчанию grep сопоставляет нужную строку, даже если она найдена как подстрока в файле. А параметр -w позволяет отображать только целые слова:
grep -w "unix" geekfile.txt.

-o — по умолчанию grep показывает всю строку, которая совпала по запросу. Но при помощи опции -o можно выбрать только определенное словосочетание:
grep -o "unix" geekfile.txt.
-n — отображаем номер строки файла с совпавшей строкой:
grep -n "unix" geekfile.txt.
-v — находим строки, которые не соответствуют указанному шаблону строки поиска:
grep -v "unix" geekfile.txt.
^ — этот параметр определяет начало строки. В grep его можно использовать для сопоставления строк, которые начинаются с заданного шаблона:
grep "^unix" geekfile.txt.
$ — используется как якорь конца строки, позволяя искать строки, заканчивающиеся на определенный шаблон или набор символов:
grep "os$" geekfile.txt.
-e — задаем выражение с этой опцией, которое можно использовать несколько раз:
grep -e "Agarwal"-e "Aggarwal" -e "Agrawal" geekfile.txt.
-f — берем шаблоны из файла по одному на строку:
cat pattern.txt
Agarwal
Aggarwal
Agrawal
grep –f pattern.txt geekfile.txt
«-A», «-B», «-C» — извлекаем строку с текстовым совпадением, включая некоторое количество строк (n), предшествующих и следующих за ней:
-A — строки после вхождения;
grep -A[КоличествоСтрок(n)] [поиск] [файл]
-B — строки до вхождения;
grep -B[КоличествоСтрок(n)] [поиск] [файл]
-C — строки до и после вхождения.
grep -C[КоличествоСтрок(n)] [поиск] [файл]
В итоге команда может выглядеть так:
grep -A 2 «error» application.log
-R (или -r) — ищем текстовое вхождение во всех файлах внутри директории и ее поддиректорий.
grep -r --color=always 'vivek' /etc/passwd
При этом:
--color позволяет отображать вывод в цвете и упрощает чтение кода.

В дополнение к красному по умолчанию для вывода можно определять цвета с помощью переменной оболочки GREP_COLOR.
Сохранение вывода grep в файл
Допустим, вам необходимо выполнить поиск по ключевому слову cloud и сохранить вывод в файле с именем my-cloud.txt. Тогда вводим такую команду:
$ grep cloud squid.conf > my-cloud.txt.
Также можно выполнить ограниченный поиск, включив в него строки, которые начинаются с ключевого cloud:
$ grep -w '^cloud' squid.conf > my-cloud.txt.
Поиск специальных символов с помощью grep
Если нужно найти определенный символ, можно попросить grep обрабатывать ваш ввод как фиксированную строку с помощью опции -F или команды fgrep.
Например:
## Match '[xyz]' in the filename ##
fgrep '[xyz]' filename #deprecated syntax
grep -F '[xyz]' filename
Подавление сообщений об ошибках
С помощью grep можно не выводить на экран ошибки о несуществующих или нечитаемых файлах через использование параметра -s:
Например:
$ grep -R -i -s 'regex' /etc/
$ grep -R -i -s 'vivek' /etc/
Регулярные выражения в grep
Регулярные выражения — инструмент для определения общих шаблонов поиска, расширяющий спектр возможностей обработки текстовой информации. Они представляют собой некую последовательность символов. Например, ^w1, w1|w2, [^ ], foo, bar, [0-9].
Команда grep располагает базовыми и расширенными выражениями:
Базовые (BRE) выражения предоставляют набор символов: ., *, [], [^], ^ и $.
Расширенные (ERE) выражения в дополнение к базовым поддерживают следующие символы: +, ?,{n,m},|.
Основные регулярные выражения:
Параметр | Что означает |
---|---|
. | Соответствует любому отдельному символу |
? | Предыдущий элемент — необязательный и будет сопоставлен максимум один раз |
* | Предыдущий элемент будет совпадать ноль или более раз |
+ | Предыдущий элемент будет сопоставлен один или несколько раз |
{N} | Предыдущий элемент совпадает ровно N раз |
{N,} | Предыдущий элемент совпадает N или более раз |
{N,M} | Предыдущий элемент совпадает не менее N раз, но не более M раз |
- | Представляет диапазон, если он не является первым или последним в списке, или конечной точкой диапазона в списке |
^ | Соответствует пустой строке в начале строки. Также представляет символы, не входящие в диапазон списка |
$ | Соответствует пустой строке в конце строки |
\b | Соответствует пустой строке на окончании слова |
\B | Соответствует пустой строке, если она не находится на окончании слова |
\< | Найти пустую строку в начале слова |
\> | Найти пустую строку в окончании слова |
Примеры регулярных выражений grep
Чтобы продемонстрировать, как работают регулярные выражения grep, найдем слово с именем cloud в файле /etc/passwd:
$ grep 'cloud' /etc/passwd
Как вывод получим:
cloud :x:1000:1000:Cloud Gite,,,:/home/cloud:/bin/bash
cloud gite:x:1001:1001::/home/cloudgite:/bin/sh
git cloud :x:1002:1002::/home/gitecloud:/bin/sh
Далее найдем слово с именем cloud в любом регистре:
$ grep -i -w 'cloud' /etc/passwd
И после этого выполним поиск двух слов clou» или raj в любом регистре:
$ grep -E -i -w 'cloud|raj' /etc/passwd
Теперь найдем слова Linux или UNIX в любом регистре с применением команды egrep:
$ egrep -i '^(linux|unix)' filename
# Same as above by passing the '-E' to the grep #
$ grep -E -i '^(linux|unix)' filename
Важно учесть, что последняя версия egrep покажет предупреждение, что команда устарела и нужно использовать grep -E. Чтобы этого избежать, следует обновить скрипты и команды. Правильный запрос будет выглядеть так:
$ grep -E -i 'foo|bar' /path/to/file вместо $ egrep -i 'foo|bar' /path/to/file.
Как сопоставить отдельные символы
Символ . (точка) соответствует одному элементу. То есть его можно использовать в качестве замены любого другого символа.
Чтобы показать, как это выглядит на практике, возьмем файл demo.txt:
$ cat demo.txt
foo.txt
bar.txt
foo1.txt
bar1.doc
foobar.txt
foo.doc
bar.doc
dataset.txt
purchase.db
purchase1.db
purchase2.db
purchase3.db
purchase.idx
foo2.txt
bar.txt
Найдем все имена файлов, которые начинаются с purchase:
$ grep 'purchase' demo.txt.
После чего выделим все имена файлов, которые начинаются с purchase и заканчиваются на db:
$ grep 'purchase.db' demo.txt.
А также, для примера, найдем все имена файлов, которые начинаются с purchase, но заканчиваются на db:
$ grep 'purchase..db' demo.txt.

Как сопоставить только точку (.)
Точка играет особую роль в регулярных выражениях, так как соответствует любому символу. Однако, если необходимо не заменять, а искать именно фактическую точку, можно воспользоваться опцией экранирования.
Для этого перед . нужно поставить обратную косую черту \:
$ grep 'purchase..' demo.txt
$ grep 'purchase.\.' demo.txt

Как использовать якоря
Чтобы заставить регулярное выражение сопоставлять только начало или конец строки, можно применять якоря ^ и $. Чтобы отобразить строки, которые начинаются с cloud, нужно ввести:
$ grep -R ^cloud /etc/passwd
Примеры выходных данных:
cloud :x:1000:1000:Cloud Gite,,,:/home/cloud:/bin/bash
cloud gite:x:1001:1001::/home/cloudgite:/bin/sh
Также можно отобразить только строки, которые начинаются со слова cloud, то есть не выводить cloudgite, cloudg и т.д.:
$ grep -R '^cloud$' /etc/passwd
Как сопоставить набор символов с помощью grep
Так как точка . соответствует любому отдельному символу, с помощью grep можно сопоставлять определенные символы и их диапазоны. Представим, что необходимо сопоставить Vivek и vivek: $ grep '[vV]ivek' filename или $ grep '[vV][iI][Vv][Ee][kK]' filename
Сопоставим цифры и символы верхнего и нижнего регистра. Например, попробуем посчитать слова, такие как vivek1, Vivek2 и так далее, с помощью:
$ grep -w '[vV]ivek[0-9]' filename
Или сопоставив foo11, foo12, foo22 через:
$ grep 'foo[0-9][0-9]' filename
Также можно использовать не только цифры, но и буквы: $ grep '[A-Za-z]' filename.
Например, отобразим все строки, в которых содержатся символы w или n:
$ grep [wn] filename
Какие универсальные символы существуют
Помимо стандартных символов, у которых есть конкретные задачи, существуют и универсальные.
Поиск по шаблону с символом -
Найдем все строки, которые соответствуют –test– с использованием опции -e Без нее grep попытается проанализировать –test– как список опций. Например:
$ grep -e '--test--' filename
Операция OR
Если необходимо сопоставить несколько текстовых выражений, можно применить опцию OR. Используем следующий синтаксис:
$ grep -E 'word1|word2' filename
### OR ###
$ egrep 'word1|word2' filename
$ grep 'word1\|word2' filename
Операция AND
Используем следующий синтаксис для отображения всех строк, в которых содержатся как word1, так и word2:
$ grep 'word1' filename | grep 'word2' или $ grep 'foo.*bar\|word3.*word4' filename
Как проверить последовательность
Чтобы проверить, как часто символ должен повторяться в последовательности, используйте следующий синтаксис: {N}, {N,}, {min,max}.
Например:
Сопоставляем символ v два раза:
$ egrep "v{2}" filename
Следующий пример будет соответствовать как словам co», так и cool:
$ egrep 'co{1,2}l' filename
Этот пример будет соответствовать любой строке из как минимум трех букв c:
$ egrep 'c{3,}' filename
Коротко о команде grep в Linux
В комьюнити разработчиков распространено слово «грепать» — то есть искать какое-либо регулярное выражение в большом объеме файлов. Делать это позволяет универсальная утилита grep, которую можно применять для работы с любыми доступными в Cloud.ru Linux-дистрибутивами.
Владение grep помогает искать файл с конкретной строкой в файловой системе или, наоборот, строки в файле, где содержатся определенные символы. А комбинируя все ее функциональные возможности, можно решать самые разные задачи поиска.
Вам может понравиться


Cloud.ru и AI: как мы поддержали выход Wildberries на новый рынок

Какие новости за февраль и март — дайджест Cloud.ru

INSERT INTO SQL: примеры добавления данных в таблицу

Node.js на Ubuntu 24.04: как установить и настроить

Что такое HTTPS и как он защищает ваши данные

REST API: что это и как использовать

Как создать Telegram Web App: инструкция по разработке Mini App

Как привлекать клиентов и зарабатывать до 20% на рекомендациях: готовые инструменты

Коды ошибок HTTP: что нужно знать о серверных и клиентских ошибках

Лучшие дистрибутивы Linux: выбор популярных версий

Система управления базами данных (СУБД): что это такое и зачем нужна

Все о Telegram-ботах: какие бывают и как их сделать самому

VPS/VDS: что это такое и чем они отличаются? Полное руководство

Что такое NVMe и как он отличается от SATA SSD и M.2

Микросервисная архитектура: чем она хороша и кому нужна

Как развернуть WordPress в облаке: инструкция для новичков

Применение LLM в бизнесе: опыт лидеров и роль облачного провайдера

Центры обработки данных (ЦОД): что это и как они работают

Какие новости за январь — дайджест Cloud.ru

PostgreSQL: что это за СУБД и чем она хороша

Что может chmod: как управлять доступами к файлам и папкам в Linux

Как узнать IP-адрес в Linux через командную строку

Как узнать IP-адрес своего компьютера

Система MySQL: что это и для чего нужна

Команды kill и killall в Linux: как завершить ненужные процессы

Работа с файлами в Linux: их создание и организация через терминал

Стандарт Tier III для дата-центра: что значит и почему это круто

Какие новости за декабрь и начало января — дайджест Cloud.ru

Что такое FTP-протокол и как настроить FTP сервер

Белые и серые IP, динамические и статические - в чем различие

Как защищать сайты и приложения в облаке от DDoS-атак

Какие новости за ноябрь — дайджест Cloud.ru

BAT-файлы: что это такое, зачем они нужны и как их создавать

Гайд по протоколу HTTP: расшифровка, структура и механизм работы

Межсетевой экран, firewall и брандмауэр: что это, в чем между ними разница и зачем они нужны

Kubernetes на Cloud.ru Evolution: возможности и преимущества

Какие новости за октябрь — дайджест Cloud.ru

Как создать сетевую архитектуру для размещения межсетевых экранов на платформе Облако VMware

Рассказать про технологии лампово, или Как мы провели конференцию GoCloud Tech для инженеров и...

Какие новости за сентябрь — дайджест Cloud.ru

Высокоресурсные вычисления: роль суперкомпьютеров в жизни и бизнесе

Реферальная программа Cloud.ru: как устроена и как на ней зарабатывать

Сетевая модель OSI: что это такое и зачем она нужна

Какие новости за август — дайджест Cloud.ru

Сетевые протоколы передачи данных — что это такое и какие бывают

Какие новости за июль — дайджест Cloud.ru

Как новые возможности в юридических документах Cloud.ru облегчают работу с договорами и не только

Какие новости за июнь — дайджест Cloud.ru

Как обновления VMware Cloud Director облегчают управление и делают работу с инфраструктурой в ...

Как мы рассчитывали «Панораму российского IT-рынка» за 2022 год

Как снизить риски утечки данных и санкций госрегуляторов: 152-ФЗ в Cloud.ru

Бесплатный курс по работе с Cloud.ru Advanced: рассказываем, в чем польза, кому подойдет и как...

Как модель Anything as a Service упрощает IT-процессы

Снижение рисков на производстве: AI-сервис распознает нарушения ношения СИЗ

Kandinsky 2.1: новый уровень в генерации изображений по текстовому описанию

Облачные сервисы для стартапов: как пройти путь от идеи до цифрового продукта и не разориться

Создать пользователя, настроить 2FA, связаться с поддержкой — новые возможности личного кабине...

VDI: что это, как работает и в чем выгода для бизнеса

Как защитить облачную инфраструктуру — рассказываем на примере межсетевого экрана нового покол...

Как начать использовать AI/ML на практике

Бессерверные вычисления: что это за технология и кому она нужна

Чек-лист: как обеспечить безопасность облачной инфраструктуры

Искусственный интеллект

Что такое IaaS?

Что такое PaaS

Machine Learning

Data Science

Машинное обучение без учителя

Классическое машинное обучение

Нейронные сети

Глубокое обучение

Защита персональных данных: как легче соблюдать закон с Cloud.ru и сохранять спокойствие

Как сохранить IT-инфраструктуру и бизнес: руководство к действию

Машинное обучение и Big Data в кибербезопасности

Ответы на актуальные вопросы

Что такое DDoS-атаки, чем они опасны и как от них защититься

Аудит информационной безопасности: что это, зачем и когда его проводить

Межсетевые экраны: UTM, NGFW-системы, NTA, NDR

Обзор межсетевых экранов, систем IPS и IDS

PostgreSQL vs MySQL: какая система подходит вашему бизнесу

Основы резервного копирования

Специальное предложение «180 дней тестового периода резервного копирования» для всех клиентов
Платформа SberCloud Advanced теперь обеспечивает максимальный уровень защиты персональных данных

Что такое объектное хранилище S3 и как его используют

Customer Enablement: как SberCloud работает с клиентами, чтобы сделать миграцию в облако комфо...

Сеть доставки контента CDN: новые функциональные возможности и преимущества

Объясняем на кейсах: польза CDN для бизнеса

Новая Windows Server 2022 в облаке SberCloud — новые возможности клиентов

Запуск нового сервиса Managed OpenShift в облачной среде SberCloud

Как работает технология DNS

SberCloud Advanced запустила третью ресурсную зону доступности для комфортной работы клиентов

PostGIS в PostgreSQL — как можно использовать

GitLab для начинающих: как и для чего используется

Краткий обзор методологии CI/CD: принципы, этапы, плюсы и минусы

Персональные данные: правильно обрабатываем и храним

Кто и зачем использует облачные модели IaaS и PaaS

152-ФЗ в облаке: хранение персональных данных в облаке

Как работает CDN (Content Delivery Network)?

Service Level Agreement (SLA): все о соглашении об уровне сервиса

Что такое «интернет поведения» (IoB)?

Чек-лист: 6 шагов для успешной миграции в облако

Машинное обучение: просто о сложном

Профессия DevOps-инженер: кто это и чем занимается

Гайд по Kubernetes. Эпизод I: k8s для неразработчиков

Публичные, частные и гибридные облака: в чем разница?
