← Все вопросы

Какие основные параметры (флаги) есть у grep?

Задан 11 часов назад403 просмотров2 ответа
0

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

2 ответа

5
✓ Принятый ответ — помог автору

Вот рабочий минимум флагов grep, которые покрывают 90% задач:

# -i — игнорировать регистр
grep -i "error" app.log        # найдёт Error, ERROR, error

# -r — рекурсивно по каталогу
grep -r "TODO" ./src           # ищем во всех файлах внутри src

# -n — показывать номера строк
grep -n "def " main.py

# -v — инверсия: строки БЕЗ совпадения
grep -v "#" config.conf        # убрать комментарии

# -c — счётчик совпавших строк
grep -c "GET" access.log

# -l — только имена файлов, где есть совпадение
grep -rl "password" .

# -E — расширенные регулярки (grep -E == egrep)
grep -E "cat|dog" animals.txt

# -w — только целое слово
grep -w "in" text.txt           # не зацепит "main", "point"

Контекст вокруг совпадения:

grep -A 2 "Exception" log.txt   # +2 строки After (после)
grep -B 2 "Exception" log.txt   # +2 строки Before (до)
grep -C 2 "Exception" log.txt   # по 2 строки с обеих сторон

Связка с пайпом — самый частый сценарий, когда фильтруем чужой вывод:

ps aux | grep -i nginx          # найти процессы nginx
history | grep "git commit"     # вспомнить команду

Почему это удобно: флаги комбинируются. Например grep -rin "todo" ./src = рекурсивно + без регистра + с номерами строк за один проход. А -c и -l отлично подходят для скриптов, потому что отдают компактный машинно-читаемый результат.

4

Лайфхак к ответу выше: совет с ps aux | grep nginx имеет известную мелочь — сам процесс grep тоже попадает в выдачу. Чтобы убрать его, есть классический трюк со скобкой в шаблоне:

ps aux | grep "[n]ginx"

Регулярка [n]ginx означает «n, затем ginx», то есть совпадает со строкой nginx, но сама строка процесса grep содержит [n]ginx и под шаблон не подходит. Либо просто используйте pgrep nginx.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект