Парсинг текста утилитой cut в Ubuntu: полный гид

Введение

При администрировании серверов под управлением Linux системным инженерам регулярно приходится фильтровать структурированные дампы, системные журналы и конфигурационные файлы. Стандартная утилита cut из состава GNU Coreutils остаётся одним из самых легковесных и быстрых инструментов для выборки столбцов, байтов и подстрок. В этой статье мы на практических примерах в Ubuntu разберём основные сценарии её использования — от базового разделения полей до продвинутой модификации выходного формата.

Подготовка тестового окружения и файлов с данными

Чтобы не засорять домашний каталог и безопасно экспериментировать с командами, создадим изолированную директорию и перейдём в неё с помощью mkdir -p ~/cut_practice && cd ~/cut_practice.

Создание тестовой папки и переход в нее

Сформируем файл users.txt, имитирующий типовую системную структуру с разделителем-двоеточием (:), аналогично /etc/passwd. Воспользуемся printf для генерации записей об учётных записях:

Формирование users.txt через printf

Для отработки выборки из CSV-файлов, где разделителем выступает запятая (,), создадим документ servers.csv со списком сетевых узлов, их адресов и статусов доступности:

Создание файла servers.csv

Проверим корректность структуры сгенерированного файла users.txt с помощью cat users.txt:

Просмотр содержимого users.txt

Аналогично убедимся, что файл servers.csv успешно записан со всеми колонками и кодами ответов, выполнив cat servers.csv:

Проверка содержимого servers.csv

Выборка колонок с разделителями: флаги -d и -f

Если требуется извлечь строго первый столбец из файла users.txt, ориентируясь на двоеточие как разделитель, выполните cut -d ':' -f 1 users.txt.
Параметр -d ':' указывает граничный символ между полями, а ключ -f 1 указывает утилите отфильтровать только идентификаторы ID.

Извлечение первого поля из users.txt

Когда необходимо забрать сразу несколько несмежных колонок, перечислите их через запятую: cut -d ':' -f 2,4 users.txt.
В результате терминал выведет только имя сотрудника (2-я колонка) и название подразделения (4-я колонка), сохранив исходный разделитель.

Выборка второй и четвертой колонок

Для непрерывных диапазонов полей применяется дефис (-). Команда cut -d ',' -f 1-3 servers.csv распарсит CSV-файл с разделителем-запятой (-d ',') и выведет подряд первые три атрибута: имя хоста, IP-адрес и рабочее состояние.

Выборка диапазона полей с первого по третье

Если требуется отсечь только первый столбец, забрав все последующие данные до самого конца строки, укажите открытый диапазон: cut -d ':' -f 2- users.txt.
Конструкция -f 2- сообщает программе, что нужно захватить всё содержимое, начиная со второй позиции, проигнорировав поле ID.

Срез со второго поля до конца строки

Посимвольная и побайтовая нарезка: ключи -c и -b

В ситуациях, когда файл имеет фиксированную ширину колонок без явных разделителей, удобнее оперировать символами. Команда cut -c 1-5 users.txt вырезает ровно с 1-го по 5-й символ в каждой строке документа.

Выборка первых пяти символов строки

Точно так же можно выделить фрагмент из середины строкового буфера. Вызов cut -c 5-15 users.txt ограничит выборку диапазоном с 5-й по 15-ю знаковую позицию включительно.

Выделение подстроки с 5 по 15 символ

Для работы с бинарными строками или ASCII-текстом на низком уровне применяется флаг -b. Инструкция cut -b 1-8 servers.csv выполняет побайтовый срез с 1-го по 8-й байт, изолируя префикс с идентификатором сервера.

Побайтовая нарезка с 1 по 8 байт

Тонкая настройка вывода: замена разделителя и инверсия колонок

Исходный символ-разделитель не всегда удобен для чтения. Чтобы при извлечении 1-й, 2-й и 4-й колонок заменить двоеточия на наглядный пайплайн с пробелами, используйте опцию --output-delimiter: cut -d ':' -f 1,2,4 --output-delimiter=' | ' users.txt.
Этот приём позволяет форматировать отчёты прямо на лету без привлечения sed или awk.

Изменение выходного разделителя на пайп

Иногда проще указать колонку, которую нужно выбросить, чем перечислять все нужные поля. Флаг --complement инвертирует логику выборки: cut -d ',' --complement -f 2 servers.csv исключит именно второй столбец (IP-адрес), сохранив в потоке вывода 1-е, 3-е и 4-е поля.

Инверсия выборки полей флагом –complement

По умолчанию cut выводит строки целиком, если в них не найден заданный разделитель. Чтобы исключить строки, нарушающие формат, добавьте флаг -s (--only-delimited): cut -d ':' -s -f 2 users.txt.
Команда отбросит любые строки без символа : и обработает только валидные записи.

Фильтрация строк без разделителя опцией -s

Мы подробно рассмотрели ключевой инструментарий cut в Ubuntu — от базового синтаксиса до специфических флагов инверсии и подавления неразделённых строк. Включение этой утилиты в связку с конвейерами Bash позволит вам существенно ускорить скрипты автоматизации и парсинг журналов без избыточных вычислительных затрат.