Уроки модуля (2/2)
Конвейеры и фильтры (grep и |)
Одной из наиболее мощных функций командной строки Linux является возможность подключать различные команды так, чтобы выходные данные одной из них становились входными данными для следующей. Этот метод реализуется с использованием конвейеров и обычно сочетается с командой фильтрации текста grep.
Фильтрация текста: grep
Команда grep (Глобальная печать регулярных выражений) ищет определенную строку текста в одном или нескольких файлах и печатает соответствующие строки:
grep "string" [file_name]Полезные опции для grep
grep -i "error" server.log: выполняет поиск без учета регистра (игнорирует разницу между прописными и строчными буквами, находя «Ошибка», «ошибка» или «ОШИБКА»).grep -n "connection" server.log: отображает номер строки вместе с соответствующей строкой.grep -v "INFO" server.log: Инвертирует поиск, отображая только те строки, которые не содержат указанное ключевое слово.
Объединение команд: конвейер |
Оператор конвейера представлен вертикальной чертой |. Он отправляет стандартный вывод команды слева непосредственно на стандартный ввод команды справа:
[command1] | [command2]Например, если файл журнала огромен и вы хотите найти определенное слово, не печатая весь файл, вы можете объединить cat и grep:
cat logs/server.log | grep ERRORПри этом считывается весь файл server.log с помощью cat, но вместо вывода его на экран он передает поток в grep, который фильтрует и отображает только строки, содержащие слово «ОШИБКА».
Примеры использования и распространенные ошибки
Если вы ищете слово в нижнем регистре (например, «post») в файле, который содержит его только в верхнем регистре (например, «POST»), grep ничего не вернет:
grep "post" logs/access.log
# Output: (no results, search is case-sensitive by default)Чтобы найти строку независимо от ее регистра, используйте флаг -i:
grep -i "post" logs/access.log
# Output:
# 127.0.0.1 - - [22/May/2026:10:10:00 +0000] "POST /login HTTP/1.1" 401 234Если указанный файл не существует, grep вернет ошибку:
grep "ERROR" nonexistent_file.log
# Output:
# grep: nonexistent_file.log: No such file or directoryПопробуйте сами
Упражнение 1. Поиск ошибок в файлах журналов
Отфильтруйте файл logs/server.log, чтобы извлечь и отобразить только строки, содержащие слово ERROR (с учетом регистра).
Показать подсказку
Используйте команду grep, за которой следует слово для поиска и путь к файлу.
Решение доступно после 3 попыток
Упражнение 2. Трубопроводы и фильтры
Используйте команду cat, чтобы прочитать файл logs/server.log и передать (|) его выходные данные команде grep, чтобы отфильтровать и распечатать только строки, содержащие слово «ПРЕДУПРЕЖДЕНИЕ».
Показать подсказку
Подключите cat logs/server.log к grep WARNING, используя канал '|' характер.
Решение доступно после 3 попыток
Упражнение 3. Поиск без учета регистра
Найдите все строки, содержащие слово «post» (в верхнем или нижнем регистре) в файле «logs/access.log», используя соответствующий флаг grep.
Показать подсказку
Используйте grep с опцией -i, чтобы игнорировать чувствительность к регистру.
Решение доступно после 3 попыток