Відповіді:
$ 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 і є символом ASCII повернення каретки (CR).
Тут ми бачимо, що у файлу f1 є три рядки, але немає CR, тому всі закінчення рядків повинні бути сольними LF у стилі Unix.
Файл f2 має рівну кількість рядків та CR, тому доцільно здогадатися, що він використовує закінчення рядків CR, LF, як використовуються MSDOS та Windows.
file -m magicfile f1 f2 f3
У 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
Зауважте, що для швидкості враховуються лише окремі \rs та \ns, але це був би досить хиткий файл, який мав однакову кількість обох типів і ще не був файлом Windows CRLF ...
Також зауважте, що інструмент * nix fileне здійснює повного сканування файлу, тоді як цей perlсценарій це робить. Ви не згадали, на якій платформі хочете, щоб вона працювала; Я використовував bashскрипт, щоб перевірити вихід Perl, але це можна змінити на cmdсценарій Window .
Ви можете просто передати файл на нього.
fileне виводить закінчення рядка стану , якщо він може знайти більш точну відповідність , ніж ASCII, тобтоsetup.py: a python script text executable. Здається, не можна знайти прапор, щоб змінити таку поведінку.