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

Конвертация текстовых файлов между UNIX и Windows

5 min read Sysadmin Обновлено 20 Nov 2025
Конвертация текстовых файлов между UNIX и Windows
Конвертация текстовых файлов между UNIX и Windows

Проблема вкратце

Текстовые файлы на UNIX/Linux используют символ окончания строки LF (line feed, \n). Windows использует пару символов CR+LF (carriage return + line feed, \r\n). Когда файл создают в одной системе и открывают в другой без конверсии, видны артефакты:

  • В Windows-среде строки из UNIX часто отображаются в одну строку.
  • В UNIX-среде в текстах из Windows часто видны символы ^M (то есть CR) в конце строк.

Это бытовая проблема для администратора, разработчика и пользователя.

Основные инструменты и команды

Ниже — рабочие и простые в использовании команды. Перед массовыми изменениями сделайте резервную копию.

dos2unix и unix2dos

Самые простые утилиты для преобразования формата конца строки.

dos2unix windows.txt unix.txt

unix2dos unix.txt windows.txt

Первая команда берёт файл windows.txt, конвертирует и записывает unix.txt. Обратная команда делает файл совместимым с Windows.

Важно: в некоторых дистрибутивах dos2unix перезаписывает входной файл, если указать только одно имя файла.

awk

awk удобно применять в скриптах. Примеры:

awk '{ sub("\\r$", ""); print }' windows.txt > unix.txt

awk '{ sub("$", "\\r"); print }' unix.txt > windows.txt

Первая команда удаляет завершающий \r (CR). Вторая добавляет \r перед \n.

sed

sed — лёгкий инструмент для потоковой обработки:

sed 's/\r$//' windows.txt > unix.txt

sed 's/$/\r/' unix.txt > windows.txt

sed часто быстрее и удобнее в одноразовых задачах.

perl

Perl — гибкий вариант, похожий по синтаксису на sed/awk:

perl -pe 's/\r$//' windows.txt > unix.txt

perl -pe 's/$/\r/' unix.txt > windows.txt

tr

tr пригоден для удаления символов по-кодам. Для удаления CR и Ctrl-Z (конца файла в старых Windows) используйте перенаправление:

tr -d '\015\032' < windowsfile.txt > unixfile.txt

Здесь \015 — восьмеричный код для CR, \032 — для Ctrl-Z. tr работает на побайтовом уровне и не меняет кодировку.

Редактор Vim (Vi)

В Vim можно удалить CR во всём файле одной командой. Откройте файл и выполните:

:1,$s/^M//g

Чтобы ввести символ ^M в команду, в режиме ввода нажмите Ctrl+V затем Ctrl+M. После выполнения сохраните файл (:w).

FTP и режимы передачи

FTP-клиенты обычно имеют режимы ASCII и BINARY. При передаче текстовых файлов в ASCII-кодировке клиент автоматически конвертирует окончания строк между системами.

В командной строке FTP введите:

ascii

Примечание: используйте ASCII только для настоящих текстовых файлов. Для архивов и двоичных файлов — BINARY.

Когда эти методы не сработают (ограничения и исключения)

  • Файлы с смешанными окончаниями строк (внутри одного файла встречаются и LF, и CRLF). Нужен ручной аудит и скрипты, нормализующие окончания.
  • Двоичные файлы или данные с фиксированными смещениями: изменение байтов нарушит формат. Никогда не запускайте текстовые конверторы на бинарных файлах.
  • Файлы с BOM (Byte Order Mark) в UTF‑8: некоторые утилиты могут корректно работать, но BOM стоит учитывать отдельно.
  • Отсутствие прав на запись: проверяйте права и владельца перед изменением файлов.

Альтернативные подходы и лучшие практики

  • Используйте Git-правила .gitattributes и настройку core.autocrlf для автоматической нормализации при коммитах/клонах.
  • В CI/CD включайте шаг проверки окончания строк (lint), чтобы предотвратить попадание неправильных форматов в репозиторий.
  • Для массовой миграции сначала пробегите проверку (dry‑run), затем применяйте изменения партиями.

Быстрая памятка — команды на одной странице

  • Windows → UNIX:

    • dos2unix file
    • sed ‘s/\r$//‘ file > out
    • perl -pe ‘s/\r$//‘ file > out
    • tr -d ‘\015\032’ < file > out
    • awk ‘{ sub(“\r$”, “”); print }’ file > out
  • UNIX → Windows:

    • unix2dos file
    • sed ‘s/$/\r/‘ file > out
    • perl -pe ‘s/$/\r/‘ file > out
    • awk ‘{ sub(“$”, “\r”); print }’ file > out
  • FTP: включите режим ascii при передаче текстовых файлов.

  • Vim: :1,$s/^M//g (Ctrl+V Ctrl+M для вставки ^M).

Контроль качества и критерии приёмки

Перед сдачей миграции убедитесь, что:

  1. Все тексты читаются в целевой ОС без визуальных артефактов.
  2. Никакие двоичные файлы не были изменены.
  3. Резервные копии созданы и тестовые файлы пройдены.
  4. В репозитории применены правила автоконверсии (если релевантно).

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

  • Текстовые файлы отображаются корректно в целевой среде.
  • Авотоматические тесты (если есть) не падают из-за ошибок формата строк.

Роль‑ориентированные чеклисты

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

    • Создать резервную копию всего набора файлов.
    • Запустить пакетную конверсию в тестовой среде.
    • Проверить целостность и права после операции.
  • Разработчик:

    • Настроить .gitattributes и core.autocrlf.
    • Добавить проверку окончаний строк в pre-commit hook.
  • Тестировщик:

    • Открыть ключевые файлы в целевых редакторах и проверить отображение.
    • Выполнить smoke‑tests приложения.

Советы по отладке и проверке

  • Найти файлы с CR символами:
grep -rl $'\r' .
  • Проверить тип окончания строк в файле (hexdump):
xxd file | head
  • Использовать утилиту file для проверки типа файла:
file filename

Примеры неочевидных проблем и как их решать

  • Проблема: смешанные окончания строк в одном файле. Решение: используйте sed/awk для нормализации всех строк, затем проверьте результаты.
  • Проблема: текст выглядит правильно в редакторе, но приложение ломается. Решение: проверьте кодировку (UTF‑8/UTF‑16) и наличие BOM.
  • Проблема: Git постоянно меняет окончания строк. Решение: согласуйте правила в .gitattributes и сообщите команде.

Часто задаваемые вопросы

Как быстро обнаружить, какие файлы имеют CRLF?

Используйте grep по каталогу:

grep -rl $'\r' /path/to/dir

Можно ли конвертировать прямо на месте без промежуточного файла?

Да, многие утилиты поддерживают перезапись. Например, dos2unix может перезаписать файл. Но рекомендую сначала сохранять копию.

Что делать с файлами в бинарном формате?

Не применяйте текстовые конверторы к бинарным файлам. Пользуйтесь передачей в режиме BINARY и делайте контрольные суммы перед и после.

Итог

Проблема несовместимых окончаний строк решается набором простых инструментов: dos2unix/unix2dos, sed, awk, perl, tr, а также настройками FTP и Git. Всегда делайте резервные копии и проверяйте кодировку и тип файла перед массовыми преобразованиями.

Важно: не меняйте байты в бинарных файлах и проверяйте смешанные окончания строк отдельно.

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

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

Unity Lights: циферблат Apple Watch для Black History Month
Apple Watch

Unity Lights: циферблат Apple Watch для Black History Month

Обновление видеодрайвера для Rainbow Six Siege
Windows

Обновление видеодрайвера для Rainbow Six Siege

Ограничение частоты запросов в ASP.NET Core
Backend

Ограничение частоты запросов в ASP.NET Core

Исправление лагов Android: TRIM и LagFix
Mobile

Исправление лагов Android: TRIM и LagFix

Семафоры в Bash: что это и как реализовать
Bash

Семафоры в Bash: что это и как реализовать

Что делать при перегреве PS5
Гайды

Что делать при перегреве PS5