Когда вы делитесь текстовым файлом, выбирайте окончания строк с прицелом на программу, которая будет его читать, а не только на компьютер, который будет его отображать. Для большинства файлов, перемещаемых между macOS, Linux и современными инструментами разработки, используйте LF. Выбирайте CRLF, когда этого требует инструмент, специфичный для Windows, или устоявшийся проект. На Mac вы можете преобразовать заведомо известный текстовый файл в Терминале с помощью встроенных команд и сохранить результат в отдельный файл.
Что означают LF и CRLF
Окончание строки — это символ или последовательность символов, обозначающая конец строки. Инструменты командной строки macOS используют LF, одиночный символ перевода строки (line feed). Текстовые файлы Windows обычно используют CRLF — возврат каретки (carriage return), за которым следует перевод строки. В старых файлах классической Mac OS может использоваться только CR, что является отдельным, менее распространенным форматом. Apple описывает эти соглашения и отмечает, что файлы с CRLF могут вызывать непредвиденное поведение в инструментах командной строки Unix, поскольку лишний возврат каретки остается в конце каждой строки. Руководство Apple по кроссплатформенным скриптам
Практическое правило: отдавайте предпочтение LF для скриптов и обычных текстовых файлов, которые будут использоваться в macOS, Linux или в кроссплатформенных проектах с кодом, если проектом не предусмотрено иное. Используйте CRLF, когда целевое приложение или проект явно требуют этого. Если вы не знаете наверняка, спросите получателя или ознакомьтесь с инструкциями к проекту; само по себе расширение файла не указывает на то, какое окончание строки ожидается.
Выберите формат перед преобразованием
Сначала определите следующее применение файла. Текстовый файл, который корректно открывается и работает в целевом приложении, возможно, не требует преобразования. Файл, который выглядит нормально, но вызывает сбой в скрипте оболочки или на этапе обработки данных, может содержать CRLF, оставляя скрытые возвраты каретки, влияющие на сопоставление строк или синтаксический анализ полей. Apple отмечает, что подобные проблемы могут возникать даже тогда, когда визуально содержимое выглядит правильным. Объяснение особенностей окончаний строк от Apple
TextEdit позволяет создавать и редактировать простые текстовые документы, однако в текущем руководстве Apple не описано средств управления выбором между LF и CRLF при сохранении. Команды разрыва строки в нем форматируют содержимое документа; они не позиционируются как переключатель окончаний строк файла. Если вам требуется задать определенный формат, используйте текстовый редактор с задокументированной опцией выбора окончания строк или преобразуйте заведомо известный текстовый файл в Терминале. Руководство пользователя TextEdit, Элементы управления разрывами в TextEdit
Преобразование заведомо известного текстового файла в Терминале
Сохраняйте оригинал нетронутым: записывайте результат преобразования под другим именем файла, затем откройте или проверьте новый файл перед отправкой. В Терминале замените input.txt и output.txt на реальные пути. Для файла, про который известно, что он использует Windows CRLF, тогда как для инструмента Mac или Unix требуется LF, выполните:
tr -d '\r' < input.txt > output.txt
Это удалит возвраты каретки, оставив окончания строк LF. Для файла, про который известно, что он использует LF, тогда как получателю требуется Windows CRLF, выполните:
CR="$(printf '\r')"
sed "s/$/$CR/" < input.txt > output.txt
Это добавит возврат каретки перед каждым переводом строки. Apple приводит эти примеры преобразования с использованием tr и sed. Примеры преобразования от Apple
Используйте эти команды только тогда, когда вы точно знаете исходный формат, а сам файл является обычным текстом. Преобразование в LF удаляет каждый символ CR, а не только те символы CR, которые спарены с LF; обратное же преобразование предполагает, что на входе используется LF. Для файла со смешанными окончаниями, устаревшего файла только с CR или файла со значимыми возвратами каретки в содержимом эти простые команды могут изменить больше, чем предполагаемые окончания строк. Избегайте их выполнения для бинарных файлов. Если формат файла не определен точно или важно сохранить кодировку и метаданные, используйте подходящий редактор или инструмент преобразования, предварительно сверившись с его документацией.
Проверьте результат и отправьте нужный файл
Откройте получившийся файл в предполагаемом приложении и убедитесь, что строки отображаются раздельно, а файл по-прежнему содержит ожидаемый текст. Сохраняйте оригинал до тех пор, пока получатель не подтвердит, что преобразованная копия работает. Отправляйте преобразованный результат, а не оригинал, и при необходимости указывайте ожидаемый формат окончания строк при передаче — например, «сохранено с окончаниями строк LF».
Самый безопасный выбор — тот, который указан для принимающего инструмента или проекта. При отсутствии особых требований LF является естественной отправной точкой для рабочего процесса на Mac; преобразуйте в CRLF только тогда, когда этого требует место назначения.
Источники
Designing Scripts for Cross-Platform Deployment — Apple Developer
TextEdit User Guide — Apple Support
Insert line, paragraph, and page breaks in TextEdit on Mac — Apple Support