tr и fmt: команды форматирования текста в Linux

Введение
Linux предоставляет множество простых и эффективных утилит для обработки текста. Две базовые и часто используемые — tr и fmt. Они просты, работают со стандартным вводом/выводом и отлично подходят для одноразовых правок, скриптов и пайплайнов.
В этой статье вы найдёте: понятные примеры использования tr и fmt, объяснение опций, рекомендации когда эти команды не подходят, альтернативы и готовую шпаргалку команд.
Что такое команда tr
Команда tr расшифровывается как “translate” и служит для замены, удаления или фильтрации символов в потоке данных (stdin → stdout). tr не работает с именами файлов напрямую — обычно её комбинируют с cat, редиректом или другим потоком.
Синтаксис tr
tr [option]... SET1 [SET2]SET1 и SET2 — наборы символов или специальные интерпретируемые последовательности. Примеры часто используемых последовательностей:
\\ Backslash (обратный слеш)
\b Backspace (забой)
\t Horizontal tab (горизонтальная табуляция)
\v Vertical tab (вертикальная табуляция)
[:alnum:] Все буквы и цифры
[:alpha:] Все буквы
[:blank:] Горизонтальные пробельные символы
[:digit:] Все цифры
[:lower:] Все строчные символы
[:punct:] Все знаки пунктуации
[:space:] Горизонтальные или вертикальные пробельные символы
[:upper:] Все заглавные буквыОбратите внимание: поведение может отличаться для локалей и многобайтовых кодировок (UTF-8) — подробнее в разделе “Когда tr не подходит”.
Примеры использования tr
Для всех примеров создадим файл muo.txt со следующим содержимым:
MakeUseOf. Technology, Simplified! 1234 Замена отдельных символов
Если вы хотите заменить первые указанные символы на другие, укажите SET1 и SET2. Пример, где символы M, T, S и 1 заменяются на A, B, C и D:
cat muo.txt | tr MTS1 ABCDРезультат:
AakeUseOf. Bechnology, Cimplified! D234Это простая посимвольная замена: каждый символ из SET1 заменяется соответствующим символом из SET2 по позиции.
Перевод в верхний регистр
cat muo.txt | tr a-z A-Z
cat muo.txt | tr [:lower:] [:upper:]Результат:
MAKEUSEOF. TECHNOLOGY, SIMPLIFIED! 1234 Перевод в нижний регистр
cat muo.txt | tr A-Z a-z
cat muo.txt | tr [:upper:] [:lower:]Результат:
makeuseof. technology, simplified! 1234Замена пробелов на табуляции
cat muo.txt | tr [:space:] '\t'Результат (табуляции видно как большие отступы):
MakeUseOf.\tTechnology,\tSimplified!\t1234\tЕсли вместо таба нужен перевод строки, используйте ‘\n’:
cat muo.txt | tr [:space:] '\n'Удаление символов
Опция -d удаляет указанные символы. Пример — удалить букву “e”:
cat muo.txt | tr -d 'e'Результат:
MakUsOf. Tchnology, Simplifid! 1234 Чтобы удалить все знаки пунктуации:
cat muo.txt | tr -d '[:punct:]'Результат:
MakeUseOf Technology Simplified 1234Чтобы удалить все цифры:
cat muo.txt | tr -d '[:digit:]'Результат:
MakeUseOf. Technology, Simplified! Дополнение (complement)
Опция -c инвертирует набор — tr будет работать со всеми символами, не входящими в SET1. Комбинация -cd оставляет только символы из класса:
cat muo.txt | tr -cd '[:digit:]'Результат:
1234 Важно: tr оперирует на уровне байтов для многих реализаций. При работе с UTF-8-символами будьте осторожны.
Что такое команда fmt
fmt — простая утилита для форматирования и переноса текста. Её цель — получить аккуратно отформатированные абзацы, делая текст удобочитаемым в консоли или при формировании e‑mail.
Посмотреть man-страницу:
man fmtСинтаксис fmt
fmt [-w WIDTH] [OPTION] [FILE]По умолчанию ширина — 75 колонок.
Примеры использования fmt
Создадим файл file.txt со следующим текстом:
Technology, Simplified
We're tech enthusiasts on a mission to teach the world how to use and understand the tech in their lives.Базовый запуск
fmt file.txtРезультат:
Technology, Simplified We're tech enthusiasts on a mission to teach the
world how to use and understand the tech in their lives.fmt автоматически объединяет строки абзаца и переносит их по ширине.
Установка ширины строки
fmt -w 20 file.txtРезультат:
Technology,
Simplified We're
tech enthusiasts on
a mission to teach
the world how to
use and understand
the tech in their
lives.Разделение длинных строк
Опция -s старается избежать объединения коротких строк и более аккуратно разбивать длинные строки:
fmt -s file.txtОтступ первой строки абзаца
Опция -t добавляет табуляцию (или стандартный отступ) к первой строке абзаца:
fmt -t file.txtПример вывода:
Technology, Simplified
We're tech enthusiasts on a mission to teach the world how to use and
understand the tech in their lives.Когда эти команды не подходят (контрпримеры)
- Многобайтовые символы: tr в некоторых системах обрабатывает данные как байты. Замена по диапазону a-z может не затрагивать UTF-8 буквы. Для Unicode-замен используйте awk с поддержкой локали или iconv/пакеты на Python/Perl.
- Сложные шаблоны: если нужно менять по регулярным выражениям, лучше sed или awk.
- Контекстные замены: tr не смотрит на контекст — он посимвольно заменяет символы. Для условной замены нужен awk/sed.
- Работа с большими текстовыми потоками и Unicode-aware переносами: лучше использовать fold/rsync/специальные утилиты или писать на языке со встроенной поддержкой Unicode.
Альтернативы и когда их использовать
- sed — замены по регулярным выражениям, встраиваемые скрипты.
- awk — разметка полей, вычисления и условные правки.
- cut/paste — извлечение и соединение колонок.
- fold — простой перенос по ширине, без объединения абзацев.
- perl/python — для сложных, локально-независимых преобразований текста.
Шпаргалка и часто используемые сниппеты
# Заменить все lowercase на UPPER
cat file | tr '[:lower:]' '[:upper:]'
# Удалить все цифры
tr -d '[:digit:]' < file
# Оставить только цифры
tr -cd '[:digit:]' < file
# Преобразовать пробелы в переводы строк
tr ' ' '\n' < file
# fmt: форматировать файл с шириной 80
fmt -w 80 file.txtБыстрые правила и эвристики
- Всегда сначала делайте dry-run на копии или с небольшим фрагментом файла.
- Для пайпов — используйте tr в середине цепочки, а fmt в конце, когда нужно окончательное выравнивание.
- Если видите странные символы после tr — проверьте локаль и кодировку.
Ролевые чеклисты
Разработчик:
- Проверить кодировку файла (file, iconv).
- Тестировать на наборе юнит-данных.
- Добавить комментарии в скрипты.
Системный администратор:
- Использовать tr в логах/пайпах для фильтрации нежелательных символов.
- Проверять производительность на больших файлах.
Технический писатель:
- Прогонять тексты через fmt перед публикацией в текстовых интерфейсах.
- Контролировать переносы и пунктуацию после автоматической обработки.
Мини-методология: как интегрировать tr/fmt в рабочий процесс
- Определите задачу: замена символов или перенос абзацев.
- Проверьте кодировку файла (utf-8 vs ascii).
- Сделайте тестовый прогон на 10–100 строках.
- Интегрируйте в скрипт с резервным копированием исходных данных.
- Логируйте изменения и шаги отката.
1‑строчный глоссарий
- stdin/stdout — стандартный ввод и вывод.
- SET1/SET2 — множества символов для замены в tr.
- рефлоу — автоматический перенос и объединение строк абзаца (fmt).
Советы по локализации и безопасности
- При работе с текстом на языках, отличных от английского, убедитесь, что утилиты понимают локаль: export LC_ALL=en_US.UTF-8 или ваша локаль.
- Не используйте tr для обработки двоичных файлов — возможны повреждения.
Важно
tr и fmt — простые и надёжные инструменты. Но они посимвольны (tr) и ориентированы на ASCII-стиль текста (fmt). Всегда проверяйте кодировку и делайте бэкап перед массовыми правками.
Краткое резюме
tr отлично подходит для быстрой посимвольной фильтрации и замены. fmt — для аккуратного переноса и форматирования абзацев. Вместе они покрывают большинство типичных задач по обработке текстов в терминале. Для сложных случаев используйте sed, awk или скрипты на языках с поддержкой Unicode.
Критерии приёмки
- Команды выполняют ожидаемые преобразования на тестовом файле.
- Кодировка не нарушена (UTF-8 остаётся валидной).
- Для автоматизированных сценариев предусмотрен откат и логирование.
Шаблон команды для рабочего скрипта
#!/bin/sh
# резервная копия
cp data.txt data.txt.bak
# фильтрация и форматирование
cat data.txt | tr -d '[:cntrl:]' | tr '[:upper:]' '[:lower:]' > tmp && fmt -w 80 tmp > data.txt
# проверка
rm tmpАвтор: обобщённое руководство по tr и fmt. Используйте как ближайшую шпаргалку и адаптируйте команды под свои локали и задачи.
Похожие материалы
Roblox: ошибка 529 — как исправить
Reddit для учёбы: как искать и проверять материалы
CHKDSK в Windows 11 — исправление ошибок диска
Открыть Terminal в папке Finder
Как ориентироваться по созвездиям