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

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

5 min read Linux Обновлено 13 Apr 2026
tr и fmt в Linux: форматирование текста
tr и fmt в Linux: форматирование текста

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

tr переводит или удаляет отдельные символы в потоке текста; fmt ломает и выравнивает строки под заданную ширину. Оба инструмента работают с stdin/stdout, просты в скриптах и полезны для быстрой предобработки текста. В статье — синтаксис, приемы, примеры, когда они не подходят и альтернативы.

Введение

Linux предоставляет множество инструментов для обработки текста. Команды tr и fmt помогают изменять, форматировать и упорядочивать текст прямо из терминала. Они просты, быстры и хорошо подходят для потоковой обработки (пайплайнов).

Кратко: tr — по-символьная трансформация и удаление; fmt — перенос и оптимизация длины строк.

Что такое tr

tr — сокращение от translate. Команда заменяет или удаляет конкретные символы в потоке ввода. Обычно её используют в конвейерах вместе с другими утилитами: tr читает stdin, выполняет операцию и пишет результат в stdout.

Синтаксис tr

tr [option]... SET1 [SET2]

SET — наборы символов или интерпретируемые последовательности. Часто используемые последовательности:

\\           Backslash
\b           Backspace
\t           Horizontal tab
\v           Vertical tab
[:alnum:]     Все буквы и цифры
[:alpha:]     Все буквы
[:blank:]     Горизонтальные пробелы
[:digit:]     Все цифры
[:lower:]     Все строчные символы
[:punct:]      Все знаки пунктуации
[:space:]     Горизонтальные или вертикальные пробелы
[:upper:]     Все заглавные буквы

Обратите внимание: в примерах в код-блоках обратный слэш экранирован для корректного отображения терминальных последовательностей.

Примеры использования tr

Для демонстрации создайте файл muo.txt со строкой:

MakeUseOf. Technology, Simplified! 1234   

Замена символов

Чтобы заменить указанные символы на другие, укажите первый набор и второй набор. Например, заменить символы M, T, S и 1 на последовательность ABCD:

cat muo.txt | tr MTS1 ABCD

Результат:

AakeUseOf. Bechnology, Cimplified! D234

cat используется здесь для примера; tr также может работать с вводом из файла через перенаправление.

Преобразование регистра в верхний

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.      Technology,     Simplified!     1234      

Если вместо таба поставить ‘\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 инвертирует набор символов. Опция -cd комбинирует инверсию с удалением — удаляются все символы, не указанные в наборе. Например, оставить только цифры:

cat muo.txt | tr -cd [:digit:]

Результат:

1234   

Что такое fmt

fmt — простая утилита для форматирования абзацев. Она ломает строки и старается сделать текст удобочитаемым, автоматически перенося слова так, чтобы не превышать заданную ширину колонки. Часто используется для подготовки писем и чтения текстов в консоли.

Запрос справки:

man fmt

Синтаксис fmt

fmt [-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 старается заполнить строки оптимально, не превышая 75 столбцов.

Изменение ширины

Опция -w (или запись -WIDTH) задаёт ширину в столбцах:

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

Результат:

Technology, Simplified  
We're tech enthusiasts on a mission to teach the world how to use and  
understand the tech in their lives.

Отступ первой строки абзаца

Опция -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 или fmt не подходят

  • Для сложных синтаксических преобразований лучше использовать awk или perl. tr работает только с одиночными символами и наборами.
  • fmt не понимает контекстных правил разметки (HTML, Markdown, YAML). Он ломает строки, опираясь только на пробелы и длину строк.
  • Для многострочных структур с вложенностью и сохранением форматирования применяйте целевые парсеры (htmltidy, pandoc, специализированные библиотеки).

Альтернативные подходы

  • sed — построчное потоковое редактирование, замены по шаблону, вставки и удаления блоков.
  • awk — поле-ориентированная обработка, удобна для табличных данных и более сложной логики.
  • perl — мощные регулярные выражения и текстовые трансформации в одном инструменте.
  • paste, cut, join — операции с колонками и простая обработка CSV/TSV.

Выбор: для простых символьных замен — tr; для разбиения/выравнивания — fmt; для логики — awk/sed/perl.

Шпаргалка (cheat sheet)

  • Перевод регистра: tr a-z A-Z
  • Удалить символы: tr -d ‘chars’
  • Оставить только цифры: tr -cd [:digit:]
  • Преобразовать пробелы в табы: tr [:space:] ‘\t’
  • Привести текст к ширине 80: fmt -w 80 file.txt
  • Сохранить отступы первой строки: fmt -t file.txt
  • Разбивать длинные строки: fmt -s file.txt

Краткая методология выбора инструмента

  1. Определите гранularity: символы или поля/строки?
  2. Если нужно заменить отдельные символы — tr.
  3. Если нужно форматировать абзацы по ширине — fmt.
  4. Если требуется контекст или логика — awk/sed/perl.
  5. Тестируйте на небольших примерах, затем интегрируйте в скрипт.

Ролевые чек-листы

Разработчик:

  • Проверить соглашения по кодировке (UTF-8).
  • Использовать tr только для однобайтовых замен или наборов POSIX.
  • Добавить unit-тесты на входы с краевыми символами.

Системный администратор:

  • В скриптах обеспечить обработку пустых файлов.
  • Учесть поведение при CRLF (windows) и LF (unix).
  • Добавить логирование и безопасную обработку ошибок.

Технический писатель:

  • Пробовать fmt для подготовки текстов перед публикацией.
  • Проверять переносы и не ломать специализированную разметку.

Критерии приёмки

  • Скрипт с tr/ fmt корректно обрабатывает тестовый набор входных файлов.
  • Нет потери значимых символов или разметки при ожидаемых форматах.
  • Поведение документировано в README с примерами использования.

Примеры ошибок и как их избежать

  • Ошибка: некорректная замена из-за UTF-8 многобайтовых символов. Решение: работать в однобайтовой кодировке или использовать iconv/awk/perl.
  • Ошибка: fmt ломает Markdown. Решение: не прогонять исходный Markdown через fmt, используйте специализированные инструменты.

FAQ

Как tr работает с Unicode?

tr оперирует байтами и наборы POSIX предназначены для однобайтовых локалей. Для безопасной работы с Unicode используйте perl или awk с поддержкой UTF-8.

Можно ли заменить слова, а не символы с помощью tr?

Нет. tr заменяет отдельные символы. Для замены слов используйте sed или perl.

Как применить fmt к нескольким файлам рекурсивно?

Используйте find в комбинации с xargs или цикл shell и запускайте fmt для каждого файла.

Заключение

tr и fmt — полезные утилиты для быстрой и автоматизированной обработки текста в терминале. tr хорошо подходит для низкоуровневых символьных преобразований, а fmt — для выравнивания и переноса строк по ширине. Для сложных задач комбинируйте их с sed, awk или perl.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро