Я знаю, что мы можем использовать dos2unix для конвертации между Windows и Unix. Мне интересно, есть ли какая-нибудь команда, которая может сказать мне, если файл имеет Windows или Unix конец строки?
3 ответа
$ file f1 f2 f3
f1: ASCII text, with CRLF, LF line terminators
f2: ASCII text, with CRLF line terminators
f3: ASCII text
Если вы считаете необходимым проверить каждую строку в файле, вы можете сделать это:
$ grep -c "^M" f1 f2
f1:0
f2:3
$ wc -l f1 f2
3 f1
3 f2
6 total
«^ M» был введен с использованием Ctrl+V Ctrl+M и является символом возврата каретки (CR) ASCII.
Здесь мы видим, что файл f1 имеет три строки, но не содержит CR, поэтому все окончания строк должны быть одиночными LF в стиле Unix.
Файл f2 имеет одинаковое количество строк и CR, поэтому разумно предположить, что он использует окончания строк CR, LF, используемые в MSDOS и Windows.
В Windows быстрый способ узнать это - открыть файл в блокноте. Блокнот будет показывать разрывы строк только на концах стиля Windows (CR+LF), а не на концах Unix (LF). Так что ваш текст в Unix будет выглядеть так:
Line1Line2Line3Line4
тогда как текст Windows будет выглядеть так:
line1
line2
line3
line4
Я не очень знаком с платформой unix/linux, но я уверен, что вы можете использовать подобные хаки с такими программами, как gedit или emacs.
c=($(perl -0777ne 'print $_ =~ tr/\n//; print " ";
print $_ =~ tr/\r//;'))
if ((!(c[0] + c[1]))) ;then echo no line endings
elif (( c[0] && !c[1] )) ;then echo LF
elif (( !c[0] && c[1] )) ;then echo CR
elif (( c[0] == c[1] )) ;then echo CRLF
else echo "anbigious LF ${c[0]} CR ${c[1]}"
fi
Обратите внимание, что из соображений скорости подсчитываются только отдельные \r
s и \n
s, но это был бы довольно дурацкий файл, который имел одинаковое количество обоих типов и все же не был файлом CRLF для Windows ...
Также обратите внимание, что file
инструмента * nix не выполняет полное сканирование файла, в то время как этот скрипт perl
делает. Вы не упомянули, на какой платформе вы хотите, чтобы она работала; Я использовал bash
скрипт для проверки вывода perl, но его можно изменить на Window cmd
скрипт.
Вы можете просто передать свой файл к нему.