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и других нерелевантных директориях.