В мире Unix, где всё воспринимается как текстовые файлы, одна из первых задач операционной системы заключалась в удобном представлении технических документов. Именно в середине XX века в Bell Labs зародилась система Unix, которая быстро приобрела популярность благодаря множеству утилит для работы с текстом. Одной из таких незамысловатых, но очень полезных программ стала команда fmt, появившаяся в третьей версии Berkeley Software Distribution (3BSD). Команда fmt была создана для «выравнивания» длины строк в текстовых документах. Её основной задачей стала переработка абзацев и писем, форматирование которых раньше было весьма громоздким и ручным процессом.
Важность fmt особенно чувствовалась в эпоху редактирования текста в терминальных редакторах, где автоматического переноса строк, привычного нам сегодня, просто не существовало. Суть работы fmt заключается в перераспределении текста: если строка слишком длинная, она аккуратно разбивается между словами; если строки слишком короткие, они склеиваются, чтобы приблизить их длину к заданному оптимальному значению. По умолчанию целевая длина строки составляет 65 символов, а максимальная — 75. Такой подход позволяет сделать блоки текста более ровными и визуально упорядоченными. При работе с письмами utilita fmt обладает дополнительной полезной функцией — сохранение заголовков сообщений (например, строк с «From:» и «Subject:»), что позволяет структурировать переписку без повреждения важных метаданных.
В BSD версии fmt для этого предусмотрена опция -m, а для изменения желаемой ширины строки — параметр -w. Также fmt умеет заботливо обращаться с пробелами. Например, он сохраняет дополнительные пробелы между словами, если они присутствуют в исходном тексте, создавая эффект аккуратных отступов или выравниваний. Если же требуется «сжать» промежутки до одного пробела между словами, используется опция -s, которая также создает двойной пробел после точек, следящих за окончанием предложения. fmt также поддерживает форматирование файлов, подготовленных с помощью систем nroff и troff — ранних инструментов для вёрстки текста в Unix.
Эти системы используют команды с точкой в начале строки для управления форматированием, такими как .pp (новый абзац) или .b (жирный текст). fmt распознаёт такие строки и не изменяет их, позволяя авторам легко обновлять и подправлять содержимое документа без боязни «сломать» разметку. Для ситуаций, когда присутствие строк, начинающихся с точки, не связано с форматированием, в fmt предусмотрена опция -n, которая отключает особое отношение к таким строкам и позволяет обрабатывать их как обычный текст.
Стоит отметить, что в экосистеме GNU тоже существует своя версия команды fmt, включённая в пакет coreutils. Она схожа с BSD аналогом, но обладает некоторыми отличиями в поведении и параметрах управления. Например, в GNU fmt опция -s отвечает лишь за разбиение длинных строк, не склеивая короткие, что отличается от поведения BSD fmt. Для более полного эффекта «переформатирования» в GNU реализована опция -u, которая обеспечивает единый пробел между словами и двойной пробел между предложениями. Еще одним удобным дополнением в GNU fmt является возможность указать префикс для каждой строки с помощью параметра -p.
Это крайне полезно при форматировании вложенных писем, где строки обычно начинаются с символа >. fmt аккуратно обработает текст, сохраняя эти символы, тем самым облегчая чтение и ответ на сложные письма. Функционал fmt нашёл применение не только в классической Unix-системе, но и остаётся актуальным инструментом для современных технических писателей и программистов. Он удобен при редактировании Markdown-файлов, где текст традиционно представлен в виде простых абзацев. Однако важно помнить, что fmt лучше использовать для обычного текста, так как форматирование таблиц, блоков кода и других структурных элементов в Markdown может быть нарушено.
В современную эпоху графических редакторов и мощных текстовых процессоров потребность в подобных консольных утилитах стала менее заметной для большинства пользователей. Однако fmt продолжает оставаться лаконичным и мощным решением для быстрой переработки и подгонки текста, особенно когда работают с большими объёмами материалов или автоматизируют процесс подготовки документов. Подводя итог, fmt — это простой, но незаменимый инструмент в мире Unix и Linux, который позволяет авторам и разработчикам обрабатывать текст аккуратно и эффективно. Его функциональность облегчает жизнь тем, кто предпочитает работу в командной строке и ценит скорость. Для изучения деталей и расширения возможностей fmt всегда можно обратиться к встроенной справке с помощью команды man fmt, где описаны все доступные опции и способы применения.
Таким образом, команда fmt — отличный пример утилиты, которая остаётся востребованной уже более пятидесяти лет, помогая пользователям любого уровня создавать хорошо структурированные и читаемые текстовые документы в условиях минималистичного и функционального Unix-окружения.