grep: поиск по тексту
Находим нужные строки в файлах и потоках данных.
grep — это команда, которая выводит строки, совпадающие с заданным шаблоном или регулярным выражением.
Базовый поиск
grep печатает строки, содержащие искомый текст. Можно искать в файле или в потоке из пайпа.
grep "ERROR" app.log
cat app.log | grep "timeout"Первая команда читает файл сама, вторая принимает поток. Результат — только строки с совпадением.
Полезные флаги
| Флаг | Что делает |
-i | игнорировать регистр |
-v | инвертировать: строки БЕЗ совпадения |
-n | показывать номера строк |
-c | только число совпадений |
-r | рекурсивно по папке |
grep -in "error" app.log
grep -c "200" access.log
grep -rn "TODO" ./srcВывод:
14:Connection error 27:Fatal error in handler 1523 ./src/main.sh:42:# TODO: добавить проверку
-in нашёл «error» в любом регистре с номерами строк, -c посчитал строки с «200», -rn обошёл всю папку.
Регулярные выражения
Шаблон grep — это регулярное выражение, а не просто текст. Включить расширенный синтаксис помогает -E.
grep -E "^[0-9]+" data.txt
grep -E "cat|dog" animals.txtПервая строка ищет строки, начинающиеся с цифр (^ — начало строки, [0-9]+ — одна и более цифр), вторая — строки со словом cat ИЛИ dog.
Как работает под капотом
grep читает вход построчно и для каждой строки проверяет совпадение с шаблоном, печатая подошедшие. Без -E он использует «базовые» регулярные выражения (BRE), где + и | нужно экранировать; с -E — «расширенные» (ERE), где они работают напрямую. Это потоковый инструмент: он не держит весь файл в памяти, поэтому одинаково быстр и на маленьком, и на огромном логе.
Частые ошибки
- Спецсимволы regex без экранирования. Точка
.в шаблоне значит «любой символ»; чтобы искать буквальную точку, пишите\.или используйтеgrep -F(поиск как простого текста). - Забыть -E для | и +. Без него в базовом режиме они трактуются буквально.
- grep по бинарным файлам. Может выдать мусор; добавляйте
-I, чтобы пропускать бинарники.
Итог
grep шаблон файлпечатает совпавшие строки; работает и с пайпом.- Флаги:
-i(регистр),-v(инверсия),-n(номера),-c(счёт),-r(рекурсия). - Шаблон — регулярное выражение;
-Eвключает расширенный синтаксис с|и+.