🧰 GREP в Linux: шпаргалка
🔹 Синтаксис
⚙️ Топ-опции (must-have)
-i - без учёта регистра
-n - номер строки
-H - печатать имя файла
-r / -R - рекурсивно по каталогам (-R следует по symlink)
-l - только имена файлов с совпадениями
-L - файлы без совпадений
-v - инверсия (показать НЕ совпавшие строки)
-c - количество совпадений (строк)
-o - вывести только совпавшую часть
-w - совпадение целого слова
-x - совпадение всей строки целиком
--color=auto - подсветка
🧠 Контекст вокруг совпадения
-A 5 - 5 строк после
-B 5 - 5 строк до
-C 5 - 5 строк вокруг
🧵 Несколько шаблонов
-e - несколько выражений
-f patterns.txt - шаблоны из файла
🔤 Режимы регулярных выражений
🩵BRE (по умолчанию): grep 'a\{2\}'
🩵ERE: grep -E 'a{2,}' (удобнее)
🩵PCRE: grep -P '(?<=id=)\d+' (lookbehind и т.п.)
🧩 Мини-шпаргалка по regex
Якоря и позиции
🩵 ^ начало строки, $ конец строки
🩵 \< начало слова, \> конец слова (в GNU grep часто работает)
Квантификаторы
🩵 ? 0 или 1
🩵 * 0+
🩵 + 1+ (в ERE/PCRE)
🩵 {n}, {n,}, {n,m}
Классы
🩵 . любой символ кроме \n
🩵 [0-9], [A-Za-z], [^...] (не из набора)
🩵 POSIX: [[:digit:]] [[:alpha:]] [[:alnum:]] [[:space:]]
🧪 Практика: логи и инциденты
Ошибки/варнинги
Сервис по systemd-журналу
Кто ломится по SSH (auth.log)
Найти IP в логе
📁 Поиск в конфиге
Рекурсивно, исключая мусор
grep -RIn --exclude-dir={.git,node_modules} --exclude='*.min.*' 'listen' /etc/nginx
Показать строки, где параметр закомментирован/не закомментирован
🧨 Трюки: grep + find
Только по *.conf
Большие файлы — быстрее
✅ Быстрые проверки (exit code)
🩵 0 - найдено
🩵 1 - не найдено
🩵 2 - ошибка
👉 @i_odmin
🔹 Синтаксис
grep [ОПЦИИ] 'ШАБЛОН' [ФАЙЛ...]
команда | grep [ОПЦИИ] 'ШАБЛОН'⚙️ Топ-опции (must-have)
-i - без учёта регистра
-n - номер строки
-H - печатать имя файла
-r / -R - рекурсивно по каталогам (-R следует по symlink)
-l - только имена файлов с совпадениями
-L - файлы без совпадений
-v - инверсия (показать НЕ совпавшие строки)
-c - количество совпадений (строк)
-o - вывести только совпавшую часть
-w - совпадение целого слова
-x - совпадение всей строки целиком
--color=auto - подсветка
🧠 Контекст вокруг совпадения
-A 5 - 5 строк после
-B 5 - 5 строк до
-C 5 - 5 строк вокруг
grep -nC 2 'error' /var/log/syslog🧵 Несколько шаблонов
-e - несколько выражений
-f patterns.txt - шаблоны из файла
grep -E -e 'error' -e 'warn' app.log
grep -f patterns.txt app.log🔤 Режимы регулярных выражений
🩵BRE (по умолчанию): grep 'a\{2\}'
🩵ERE: grep -E 'a{2,}' (удобнее)
🩵PCRE: grep -P '(?<=id=)\d+' (lookbehind и т.п.)
🧩 Мини-шпаргалка по regex
Якоря и позиции
🩵 ^ начало строки, $ конец строки
🩵 \< начало слова, \> конец слова (в GNU grep часто работает)
Квантификаторы
🩵 ? 0 или 1
🩵 * 0+
🩵 + 1+ (в ERE/PCRE)
🩵 {n}, {n,}, {n,m}
Классы
🩵 . любой символ кроме \n
🩵 [0-9], [A-Za-z], [^...] (не из набора)
🩵 POSIX: [[:digit:]] [[:alpha:]] [[:alnum:]] [[:space:]]
🧪 Практика: логи и инциденты
Ошибки/варнинги
grep -iE 'error|warn|fatal' /var/log/syslogСервис по systemd-журналу
journalctl -u nginx --no-pager | grep -i 'error'Кто ломится по SSH (auth.log)
grep -i 'failed password' /var/log/auth.log | tailНайти IP в логе
grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' access.log | sort -u📁 Поиск в конфиге
Рекурсивно, исключая мусор
grep -RIn --exclude-dir={.git,node_modules} --exclude='*.min.*' 'listen' /etc/nginx
Показать строки, где параметр закомментирован/не закомментирован
grep -nE '^\s*#?\s*PermitRootLogin' /etc/ssh/sshd_config🧨 Трюки: grep + find
Только по *.conf
find /etc -name '*.conf' -print0 | xargs -0 grep -nH 'timeout'Большие файлы — быстрее
LC_ALL=C grep -n 'pattern' big.log✅ Быстрые проверки (exit code)
🩵 0 - найдено
🩵 1 - не найдено
🩵 2 - ошибка
grep -q 'pattern' file && echo OK || echo NO👉 @i_odmin