Вопрос с собеседования · DevOps

Как найти текст в файлах и обработать вывод через пайпы?

JuniorLinux и диагностика
Ещё спрашивают так:
  • Как работает 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

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования