Отличия между текстовыми файлами формата Windows и Unix незначительны. В Windows, признаком конца строки является два ASCII символа - возврат каретки (CR) и переход на новую строку (LF), в Unix используется только LF. Последствия этого выражаются в том, что некоторые Windows приложения не могут показать перехода на новую строку в файлах Unix формата. Аналогично Unix программы могут показывать CR в файлах Windows формата как символ Ctrl-m (^M) в конце каждой стоки.
Далее предложено несколько решений данной проблемы. Этот пост содержит инструкции по тому как используя FTP, unix2dos и dos2unix, tr, awk, Perl, vi и vim произвести превращение одного формата файла в другой. Все эти утилиты уже присутствуют на любом Unix компьютере.
Замечание: в примерах приведенных ниже имя файла unixfile.txt будет соответствовать Unix формату текстового файла, winfile.txt соответственно для формата M$ Windows.
FTP
При использовании программы FTP для перемещения текстовых файлов между Unix и Windows системами, файлы должны быть передаваемы в формате ASCII, таким образом документ преобразуется в текстовый формат хоста. Некоторые FTP клиенты, особенно с графическим интерфейсом, выполняют преобразование автоматически. Если Вы используете FTP клиент из командной строки, то перед перемещением файлов введите:
ascii
dos2unix и unix2dos
В ОС Solaris утилиты dos2unix и unix2dos уже присутствуют и ими уже можно воспользоваться для конвертирования из командной стоки.
Для конвертирования Windows файла в Unix файл, введите:
dos2unix winfile.txt unixfile.txt
Для обратного конвертирования Unix файла в Windows файл:
unix2dos unixfile.txt winfile.txt
Замечание: эти утилиты не входят в штатную поставку Debian'а, поэтому:
apt-get install unix2dos dos2unix
tr
Вы можете использовать tr для удаления всех символов CR и Ctrl-z ( ^Z ) из Windows файла:
tr -d '\15\32' < winfile.txt > unixfile.txt
Но, нельзя использовать tr для конвертирования Unix форматов в Windows.
awk
Windows --> Unix:
awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt
Unix --> Windows:
awk 'sub("$", "\r")' unixfile.txt > winfile.txt
Старые версии awk не поддерживали функции sub. Для выхода из этой ситуации замените awk на gawk или nawk.
Perl
Windows --> Unix:
perl -p -e 's/\r$//' < winfile.txt > unixfile.txt
Unix --> Windows:
perl -p -e 's/\n/\r\n/' < unixfile.txt > winfile.txt
Должны использоваться только одинарные кавычки в каждой командной строке. Это мера предотвращения попыток команды выполнить инструкции внутри себя.
vi
В vi для удаления символа CR выполним следующую команду:
:1,$s/^M//g
Замечание: для ввода символа ^M нажмите Ctrl-v.
Vim
:set ff=unix для конвертирования в формат Unix;
:set ff=dos для конвертирования в формат Windows.
Заимствовано из http://kb.iu.edu/data/acux.html