Обработка текста
Тема дорожной карты · Bash
Обработка текста — одна из основных сильных сторон Bash и написания shell-скриптов на Linux, объединяющая конвейерную архитектуру оболочки с мощными POSIX-утилитами для преобразования, фильтрации и извлечения данных из текстовых потоков и файлов. Основной инструментарий обработки текста — grep для сопоставления шаблонов, sed для замены и удаления, awk для обработки полей и арифметики, cut для извлечения столбцов, sort для сортировки, uniq для дедупликации и tr для перевода символов — можно объединять в конвейерах Bash для выполнения сложных преобразований без написания ни строки кода на Python или Perl. Рекомендуемые практики shell-скриптов предписывают использовать наиболее подходящий инструмент для каждой задачи: cut -d: -f1 /etc/passwd понятнее и быстрее, чем эквивалентная конструкция awk, тогда как awk '{print $NF}' лучше sed с регулярным выражением для извлечения последнего поля. Когда логика обработки текста усложняется, программы awk становятся самодостаточными и тестируемыми и зачастую предпочтительнее длинных цепочек встроенных команд Bash в скриптах автоматизации Linux. Освоение обработки текста с помощью конвейеров Bash и POSIX-инструментов — базовый навык для системных администраторов Linux, DevOps-инженеров и разработчиков автоматизации преобразования данных.
Как это работает
Обработка текста использует unix-pipeline-инструменты: grep (regex-поиск), sed (stream-edit), awk (record-oriented), cut (column slice), tr (трансляция), sort, uniq, head, tail, wc, xargs. Композируйте пайпами. Пример: cat access.log | grep " 500 " | awk '{print $7}' | sort | uniq -c | sort -rn | head отвечает на "какие URL чаще всего 500".
Когда применять
Эти инструменты — для анализа логов, CSV-munging, быстрых агрегаций. awk — когда записи имеют поля. sed -i — для in-place правки (с backup sed -i.bak). grep -E (extended regex) или grep -P (PCRE) — когда нужно больше базового regex. Для повторяющихся задач оформите в скрипт + shellcheck.
Типичные ошибки
Ловушки Обработка текста: sed -i "" различается между GNU sed (Linux) и BSD sed (macOS); жадный regex матчит больше ожидаемого; locale-зависимый sort (ставьте LC_ALL=C для byte-order в скриптах); UUOC ("useless use of cat" — grep pat file вместо cat file | grep pat).