Как удалить ^M в файлах

Когда текстовой файл родом из Windows, то в Linux он будет показывать не понятный символ ^M.

Windows всегда пытался отличаться от того, что уже придумали. Помните про кодировку кириллицы 1251 )) вот везде им надо было придумать хоть какое отличие. В данном случае наглядно видно отличие символов переноса строк в Windows, Linux, Unix и MAC.

Форматы текстовых файлов DOS и Linux отличаются:

  • в DOS строки заканчиваются парой символов CR и LF (возврат каретки /r и перевод строки /n)
  • в Linux использует только символ LF перевод строки /n.

Как удалить символ ^M в файлах DOS

Для конвертации потребуется утилита dos2unix, которая есть в репозитариях Ubuntu и устанавливается просто. Откройте окно Терминала, нажмите CTRL+ALT+T, и введите команду:

sudo apt install dos2unix

Справка как использовать утилиту вызывается так:

man dos2unix
dos2unix -h

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

Конвертировать файл filein.txt из Windows формата в Linux формат с созданием нового файла fileout.txt :

dos2unix -n filein.txt fileout.txt

Конвертировать файл file.txt из Windows формата в Linux формат и с заменой существующего файла:

dos2unix file.txt

Конвертировать все файлы с расширением *.txt в текущей директории и с сохранением времени создания файлов:

dos2unix -k *.txt

Конвертировать файл file.txt из Linux формата в Windows формат и с заменой существующего файла:

unix2dos file.txt

и вот получаем результат, который выглядит как на картинке ниже:

 

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

Есть ещё нужная утилита, о которой стоит напомнить, это iconv с помощью, которой можно перекодировать файлы из любой в любую кодировку. Введите в терминале команду посмотреть доступные кодировки:

iconv -l

Конвертировать файл filein.txt из Windows CP1252 в Linux UTF-8 (Unicode) fileout.txt :

iconv -f CP1252 -t UTF-8 filein.txt | dos2unix > fileout.txt