Перейти до вмісту

Модуль 7.2: Обробка тексту

Hands-On Lab Available
Ubuntu intermediate 35 min
Launch Lab ↗

Opens in Killercoda in a new tab

Shell Scripting | Складність: [MEDIUM] | Час: 30–35 хв

Перед початком цього модуля:


Що ви зможете робити після цього модуля

Розділ «Що ви зможете робити після цього модуля»

Після завершення цього модуля ви зможете:

  • Трансформувати текст за допомогою cut, sort, uniq, tr та paste для аналізу логів
  • Написати однорядкові команди awk для вилучення стовпців, фільтрації та обчислень
  • Використовувати sed для пошуку й заміни, видалення рядків та редагування файлів на місці
  • Побудувати конвеєри обробки тексту, що комбінують кілька інструментів для складних трансформацій

Чому цей модуль важливий

Розділ «Чому цей модуль важливий»

Linux — це текстова система. Конфігурації, логи та дані — це майже завжди текст. Майстерне володіння інструментами обробки тексту дозволяє витягувати, змінювати та аналізувати дані без написання повноцінних програм на Python чи Go.

Розуміння обробки тексту допоможе вам:

  • Парсити логи — знаходити помилки, патерни та метрики.
  • Трансформувати дані — конвертувати конфіги між форматами.
  • Обробляти вивід команд — витягувати потрібне з kubectl, docker, git.
  • Автоматизувати звіти — створювати зведені таблиці прямо в терміналі.

grep, sed, awk та jq — це швейцарський ніж DevOps-інженера.


grep: Пошук за шаблоном

Розділ «grep: Пошук за шаблоном»

grep — ваш основний інструмент для пошуку.

Terminal window
# Знайти рядки з помилкою
grep "error" file.txt
# Нечутливий до регістру пошук
grep -i "error" file.txt
# Показати номери рядків
grep -n "error" file.txt
# Порахувати кількість збігів
grep -c "error" file.txt
# Тільки назви файлів, де є збіги
grep -l "error" *.log

sed: Потоковий редактор

Розділ «sed: Потоковий редактор»

sed найкраще підходить для заміни тексту “на льоту”.

Terminal window
# Замінити "old" на "new" у виводі
echo "Hello old world" | sed 's/old/new/'
# Замінити ВСІ входження у файлі (global)
sed 's/foo/bar/g' file.txt
# Редагувати файл на місці (зберегти зміни у файл)
sed -i 's/localhost/127.0.0.1/g' config.txt
# Видалити рядки, що починаються з # (коментарі)
sed '/^#/d' file.txt

awk: Обробка колонок та полів

Розділ «awk: Обробка колонок та полів»

awk — це повноцінна мова для роботи з табличними даними.

Terminal window
# Вивести тільки першу колонку (за замовчуванням роздільник - пробіл)
awk '{print $1}' file.txt
# Використати двокрапку як роздільник (для /etc/passwd)
awk -F: '{print $1, $6}' /etc/passwd
# Підсумувати значення в другій колонці
awk '{sum += $2} END {print "Сума:", sum}' data.txt
# Фільтрація за значенням поля
awk '$3 > 100 {print $1}' data.txt

В сучасному світі API та Kubernetes JSON є всюди. jq — незамінний інструмент для нього.

Terminal window
# Красиво вивести JSON
cat data.json | jq .
# Витягнути конкретне поле
echo '{"name": "Ivan", "age": 30}' | jq -r '.name'
# Вивід: Ivan (без лапок завдяки -r)
# Робота з масивами
echo '[{"id":1}, {"id":2}]' | jq '.[].id'
# Складний фільтр для Kubernetes
kubectl get pods -o json | jq -r '.items[] | select(.status.phase=="Running") | .metadata.name'

  1. Як за допомогою awk вивести останню колонку рядка, якщо кількість колонок невідома?

    Відповідь `awk '{print $NF}'`. Змінна `NF` містить кількість полів у поточному рядку.
  2. Яка команда sed замінить всі пробіли на коми у файлі?

    Відповідь `sed 's/ /,/g' <файл>`. Прапор `g` (global) обов'язковий для заміни всіх входжень у рядку.
  3. Як знайти всі рядки, що НЕ містять слово “DEBUG”?

    Відповідь `grep -v "DEBUG"`. Прапор `-v` інвертує пошук.
  4. Навіщо використовувати jq -r замість простого jq?

    Відповідь Прапор `-r` (raw-output) видаляє лапки навколо рядкових значень. Це необхідно, якщо ви хочете передати результат далі в іншу команду або записати в змінну Bash.

Завдання: Обробити список процесів та знайти “найважчі”.

  1. Виведіть список усіх процесів, залиште тільки користувача та назву команди:
    Terminal window
    ps aux | awk '{print $1, $11}' | head
  2. Підрахуйте кількість процесів для кожного користувача:
    Terminal window
    ps aux | awk '{print $1}' | sort | uniq -c | sort -rn
  3. Створіть аліас для отримання IP адрес усіх запущених подів (якщо є K8s):
    Terminal window
    kubectl get pods -o json | jq -r '.items[] | "\(.metadata.name) \(.status.podIP)"'

Критерії успіху: Ви вмієте вибирати конкретні поля з виводу команд та проводити їх базову агрегацію.


  • grep — знайти.
  • sed — змінити.
  • awk — порахувати та витягнути колонки.
  • jq — розібрати JSON.
  • Pipes (|) — з’єднати все це в потужний конвеєр.

Далі: Модуль 7.3: Практичні скрипти — навчіться писати надійні скрипти для щоденних задач.