Как найти текст в файлах и обработать вывод через пайпы?
- Как работает grep?
- Что такое pipe в bash?
grep "текст" файл — строки с совпадением; -r — рекурсивно по каталогу, -i — без учёта регистра, -n — номера строк, -c — число совпадений, -v — строки без совпадения. Пайп | передаёт вывод одной команды на вход другой: grep ERROR app.log | wc -l — посчитать ошибки. Полезные звенья: sort, uniq -c, head, wc -l, cut, awk. Перенаправление: > — в файл (перезаписать), >> — дописать, 2> — ошибки.
- grep -rn "TODO" src/ — найти все TODO с номерами строк
- sort | uniq -c | sort -rn — частоты по убыванию
- tail -f app.log | grep ERROR — следить за ошибками в реальном времени
А ещё rg (ripgrep) — быстрее grep и сам пропускает .gitignore
Подробно
Примеры:
# сколько раз встречается слово в проекте
grep -rc "deprecated" src/ | grep -v ":0"
# топ-10 IP по числу запросов в логе nginx
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head
# ошибки за сегодня в файл
grep "$(date +%F)" app.log | grep ERROR > errors_today.txt
Идея Unix: маленькие программы, каждая делает одно, и они соединяются пайпами.
Что хотят услышать
- Ключи grep: -r, -i, -n, -c, -v.
- Пайпы и перенаправление.
- Типовые цепочки sort, uniq, wc.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓grep -r ищет рекурсивно; пайп | передаёт вывод на вход другой команде
- ✗Пайп | сохраняет вывод команды в файл
- ✗> дописывает в конец файла, >> — перезаписывает
- ✗grep ищет только в одном файле, для поиска по каталогу его комбинируют с find
Разбор темы
- Командная строка — файлы, поиск, окружение и SSH
Навигация и работа с файлами, grep и пайпы, права доступа, переменные окружения и PATH, вход по SSH-ключам.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.