Gymterview
junior

Как использовать grep для поиска текста?

grep (Global Regular Expression Print) — инструмент для поиска строк, соответствующих шаблону, в файлах или потоке ввода.

Базовое использование

Пример
grep "pattern" file.txt           # Найти строки с "pattern"
grep "ERROR" application.log      # Найти ошибки в логе

Основные флаги

Флаг Назначение Пример
-i Без учёта регистра grep -i "error" log.txt
-r Рекурсивный поиск grep -r "TODO" src/
-n Показать номера строк grep -n "Exception" app.log
-v Инвертировать (строки БЕЗ паттерна) grep -v "DEBUG" app.log
-c Подсчитать количество совпадений grep -c "ERROR" app.log
-l Только имена файлов с совпадениями grep -l "password" *.yml
-L Файлы БЕЗ совпадений grep -L "password" *.yml
-w Целое слово grep -w "port" config.yml
-A N N строк ПОСЛЕ совпадения grep -A 3 "Exception" app.log
-B N N строк ДО совпадения grep -B 2 "Exception" app.log
-C N N строк до И после (контекст) grep -C 2 "Exception" app.log
-E Расширенные регулярные выражения grep -E "ERROR|WARN" app.log
-P Perl-совместимые регулярные выражения grep -P "\d{3}-\d{2}" file.txt

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

Пример
grep "^Start" file.txt            # Строки, начинающиеся с "Start"
grep "end$" file.txt              # Строки, заканчивающиеся на "end"
grep "^$" file.txt                # Пустые строки
grep "[0-9]\{3\}" file.txt       # Три цифры подряд (BRE)
grep -E "[0-9]{3}" file.txt      # Три цифры подряд (ERE — проще синтаксис)
grep -E "https?://" file.txt     # http:// или https://
grep -E "\b[A-Z]{2,}\b" file.txt # Слова из двух и более заглавных букв

Практические примеры для Java-разработчика

Примеры поиска в Java-проекте
# Найти все классы, реализующие интерфейс
grep -rn "implements Serializable" src/

# Найти все Spring-аннотации
grep -rn "@Service\|@Repository\|@Controller\|@Component" src/

# Поиск в логах с контекстом
grep -C 5 "OutOfMemoryError" /var/log/app/application.log

# Подсчитать количество ошибок по типам
grep -oE "[A-Za-z]+Exception" app.log | sort | uniq -c | sort -rn

# Найти строки с IP-адресами
grep -E "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" access.log

# Исключить директории
grep -rn --exclude-dir={target,.git,.idea} "TODO" .

# Искать только в Java-файлах
grep -rn --include="*.java" "deprecated" src/

На собеседовании: интервьюер хочет увидеть практическое использование -r, -n, -C, --include/--exclude-dir. Частая ошибка — использовать grep -r без --exclude-dir, что приводит к поиску в .git, target и других нерелевантных директориях.