Перейти к основному содержимому
Модуль 3 · Урок 2 из 27/11 в курсе~15 min
Уроки модуля (2/2)

Конвейеры и фильтры (grep и |)

Одной из наиболее мощных функций командной строки Linux является возможность подключать различные команды так, чтобы выходные данные одной из них становились входными данными для следующей. Этот метод реализуется с использованием конвейеров и обычно сочетается с командой фильтрации текста grep.


Фильтрация текста: grep

Команда grep (Глобальная печать регулярных выражений) ищет определенную строку текста в одном или нескольких файлах и печатает соответствующие строки:

Bash
grep "string" [file_name]

Полезные опции для grep

  • grep -i "error" server.log: выполняет поиск без учета регистра (игнорирует разницу между прописными и строчными буквами, находя «Ошибка», «ошибка» или «ОШИБКА»).
  • grep -n "connection" server.log: отображает номер строки вместе с соответствующей строкой.
  • grep -v "INFO" server.log: Инвертирует поиск, отображая только те строки, которые не содержат указанное ключевое слово.

Объединение команд: конвейер |

Оператор конвейера представлен вертикальной чертой |. Он отправляет стандартный вывод команды слева непосредственно на стандартный ввод команды справа:

Bash
[command1] | [command2]

Например, если файл журнала огромен и вы хотите найти определенное слово, не печатая весь файл, вы можете объединить cat и grep:

Bash
cat logs/server.log | grep ERROR

При этом считывается весь файл server.log с помощью cat, но вместо вывода его на экран он передает поток в grep, который фильтрует и отображает только строки, содержащие слово «ОШИБКА».


Примеры использования и распространенные ошибки

Если вы ищете слово в нижнем регистре (например, «post») в файле, который содержит его только в верхнем регистре (например, «POST»), grep ничего не вернет:

Bash
grep "post" logs/access.log
# Output: (no results, search is case-sensitive by default)

Чтобы найти строку независимо от ее регистра, используйте флаг -i:

Bash
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 вернет ошибку:

Bash
grep "ERROR" nonexistent_file.log
# Output:
# grep: nonexistent_file.log: No such file or directory

Попробуйте сами

Упражнение 1. Поиск ошибок в файлах журналов

Упражнение#linux.m3.l2.e1
Попыток: 0Загрузка…

Отфильтруйте файл logs/server.log, чтобы извлечь и отобразить только строки, содержащие слово ERROR (с учетом регистра).

Загрузка редактора…
Показать подсказку

Используйте команду grep, за которой следует слово для поиска и путь к файлу.

Решение доступно после 3 попыток

Упражнение 2. Трубопроводы и фильтры

Упражнение#linux.m3.l2.e2
Попыток: 0Загрузка…

Используйте команду cat, чтобы прочитать файл logs/server.log и передать (|) его выходные данные команде grep, чтобы отфильтровать и распечатать только строки, содержащие слово «ПРЕДУПРЕЖДЕНИЕ».

Загрузка редактора…
Показать подсказку

Подключите cat logs/server.log к grep WARNING, используя канал '|' характер.

Решение доступно после 3 попыток

Упражнение 3. Поиск без учета регистра

Упражнение#linux.m3.l2.e3
Попыток: 0Загрузка…

Найдите все строки, содержащие слово «post» (в верхнем или нижнем регистре) в файле «logs/access.log», используя соответствующий флаг grep.

Загрузка редактора…
Показать подсказку

Используйте grep с опцией -i, чтобы игнорировать чувствительность к регистру.

Решение доступно после 3 попыток