Как изменить окончания строк и удалить в тексте ^M . Как изменить кодировку файла

Файлы в ASCII-кодировке или совместимом наборе символов, для обозначения конца строки используют символы:

  • LF (от англ. Line feed (перевод строки), 0x0A)
  • CR (от англ. Carriage Return, 0x0D)
  • CRLF (т.е. оба символа).

В windows-системах обычно используется CRLF, в unix — LF . В web-разработке преимущественно используются unix-системы, и как следствие, принято, чтобы в файлах окончания строк обозначались с помощью LF.

Тем не менее, иногда открываешь файл для редактирования и видишь ЭТО:

Это означает, что кто-то отредактировал файл в текстовом редакторе под Windows. Подобный формат файла может привести к проблемам. Кроме того, такие файлы очень неудобно редактировать, находясь в unix-среде. Случайное удаление ^M приведет к нарушению формата файла и невозможности его корректного чтения.

 

Утилиты dos2unix и unix2dos

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

Установка:

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

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

Ключ -k позволит оставить без изменений время создания файла.

Можно вместо конвертации исходного файла создать новый файл, который будет содержать данные в нужном формате:

Использование unix2dos аналогично утилите dos2unix:

 

Утилиты todos и fromdos

Данные утилиты, так же как утилиты dos2unix и unix2dos, выполняют конвертацию файлов из unix-формата в windows-формат, и обратно.

Мне для работы удобно использовать dos2unix, поэтому fromdos я не устанавливала, но следует иметь ввиду такую возможность.

 

Утилита tr

Т.е. утилита tr удалит символы «\r» из строк.

 

Преобразование конца строк в файлах с помощью perl

Чтобы изменить windows-формат окончания строк (CRLF) на unix-формат(LF), можно использовать perl:

Обратное преобразование из unix-формата (LF) в windows-формат (CRLF):

Для преобразования сразу нескольких файлов, можно использовать маску, вместо прямого указания имени файла:

При указании маски, кавычки не используются, попытка их применения приведет к ошибке
«No such file or directory»:

Если вы попробуете выполнить преобразование конца строк под windows, то получите ошибку
«Can’t do inplace edit without backup»:

Это связано с ограничениями windows. Нужно использовать вот такую команду:

 

Изменение кодировки файла с помощью утилиты iconv

Чтобы конвертировать файл in.txt из WINDOWS-1251 в UTF-8 out.txt, можно использовать утилиту iconv ( на примере Linux Ubunta ):

Чтобы посмотреть полный список кодировок, с которыми утилита может работать, нужно вызвать iconv с параметром —list :