Когда текстовой файл родом из 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
Конвертировать из Windows формата в Linux формат все файлы с расширением *.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