Добавить в корзинуПозвонить
Найти в Дзене

grep - возможности, о которых вы могли не знать

Все знают grep "что-то" файл. Но в утилите есть тёмные углы, которые превращают её из поиска строк в настоящий анализатор логов и кода. ➤ Вариант 1 (Поиск по временному диапазону в логах): логи обычно начинаются со времени. Нужно вытащить кусок между двумя метками. # Логи с 10:00 до 10:15 grep "^2026-04-13 10:[0-1][0-9]" app.log # С помощью флага -A (after) и -B (before) grep -B 5 -A 10 "2026-04-13 10:15:00" app.log ➤ Вариант 2 (Поиск по сложным паттернам с переносом строк): когда ошибка размазана на несколько строк, а -A и -B не хватает. # Использование pcre (Perl-совместимые регексы) через -P grep -Pzo "(?s)Exception.*?\n\s+at.*?\n" app.log # -z читает весь файл как одну строку # -o выводит только совпадения # -P включает переносы в регексах ➤ Вариант 3 (Работа с бинарными файлами): иногда нужно найти строку в дампе памяти или логе, который grep считает бинарным. # Принудительно обрабатывать файл как текстовый grep -a "password" memory.dump # Или наоборот — исключить бина

grep - возможности, о которых вы могли не знать

Все знают grep "что-то" файл. Но в утилите есть тёмные углы, которые превращают её из поиска строк в настоящий анализатор логов и кода.

➤ Вариант 1 (Поиск по временному диапазону в логах): логи обычно начинаются со времени. Нужно вытащить кусок между двумя метками.

# Логи с 10:00 до 10:15

grep "^2026-04-13 10:[0-1][0-9]" app.log

# С помощью флага -A (after) и -B (before)

grep -B 5 -A 10 "2026-04-13 10:15:00" app.log

➤ Вариант 2 (Поиск по сложным паттернам с переносом строк): когда ошибка размазана на несколько строк, а -A и -B не хватает.

# Использование pcre (Perl-совместимые регексы) через -P

grep -Pzo "(?s)Exception.*?\n\s+at.*?\n" app.log

# -z читает весь файл как одну строку

# -o выводит только совпадения

# -P включает переносы в регексах

➤ Вариант 3 (Работа с бинарными файлами): иногда нужно найти строку в дампе памяти или логе, который grep считает бинарным.

# Принудительно обрабатывать файл как текстовый

grep -a "password" memory.dump

# Или наоборот — исключить бинарники

grep -I "error" ./logs/*

➤ Вариант 4 (Статистика и группировка): не просто найти, а посчитать.

# Сколько раз встретился каждый код ответа в логах nginx

grep -oE '" [0-9]{3} ' access.log | sort | uniq -c | sort -rn

# -o выводит только совпадение (не всю строку)

# -E расширенные регексы

➤ Вариант 5 (Использование как фильтр с сохранением контекста): оставить в выводе только нужные колонки.

# Из строки "time=2026-04-13 level=error msg=crash"

grep -oP 'time=\K[^ ]+' app.log

# \K означает "начать вывод отсюда"

И главное, что забывают: grep можно комбинировать. Цепочка grep | grep -v | grep -o часто делает то, для чего в других языках пишут скрипты на 20 строк.

P.S. grep -c считает количество совпавших строк. grep -m 5 останавливается после пяти совпадений. Мелочи, которые экономят время.

👉🏻 Я в Telegram - https://dzen.ru/id/686102a27e39653c3429f77f

👉🏻 Я в VK - vk.com/helcode

👉🏻 Я на Boosty - boosty.to/helcode