Гид по технологиям

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

5 min read Linux команды Обновлено 17 Dec 2025
tr и fmt: форматирование текста в Linux
tr и fmt: форматирование текста в Linux

Терминал Ubuntu с командной строкой

Введение

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 в рабочий процесс

  1. Определите задачу: замена символов или перенос абзацев.
  2. Проверьте кодировку файла (utf-8 vs ascii).
  3. Сделайте тестовый прогон на 10–100 строках.
  4. Интегрируйте в скрипт с резервным копированием исходных данных.
  5. Логируйте изменения и шаги отката.

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. Используйте как ближайшую шпаргалку и адаптируйте команды под свои локали и задачи.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Roblox: ошибка 529 — как исправить
Техподдержка

Roblox: ошибка 529 — как исправить

Reddit для учёбы: как искать и проверять материалы
Образование

Reddit для учёбы: как искать и проверять материалы

CHKDSK в Windows 11 — исправление ошибок диска
Windows

CHKDSK в Windows 11 — исправление ошибок диска

Открыть Terminal в папке Finder
macOS

Открыть Terminal в папке Finder

Как ориентироваться по созвездиям
Астрономия

Как ориентироваться по созвездиям

Скачать HP Smart для Windows 11 — руководство
Принтеры

Скачать HP Smart для Windows 11 — руководство