Перейти до основного вмісту
Модуль 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, який фільтрує та відображає лише рядки, що містять слово "ERROR".


Приклади використання та поширені помилки

Якщо ви шукаєте слово в нижньому регістрі (наприклад, "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, щоб відфільтрувати та надрукувати лише рядки, які містять слово 'WARNING'.

Завантаження редактора…
Показати підказку

Підключіть cat logs/server.log до grep ПОПЕРЕДЖЕННЯ за допомогою каналу '|' характер.

Рішення доступне після 3 спроб

Вправа 3: пошук без урахування регістру

вправи#linux.m3.l2.e3
Спроби: 0Завантаження…

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

Завантаження редактора…
Показати підказку

Використовуйте grep з параметром -i, щоб ігнорувати чутливість до регістру.

Рішення доступне після 3 спроб