Odpowiedzi:
$ file f1 f2 f3
f1: ASCII text, with CRLF, LF line terminators
f2: ASCII text, with CRLF line terminators
f3: ASCII text
Jeśli uważasz, że konieczne jest sprawdzenie każdej linii w pliku, możesz to zrobić:
$ grep -c "^M" f1 f2
f1:0
f2:3
$ wc -l f1 f2
3 f1
3 f2
6 total
„^ M” został wprowadzony przy użyciu Ctrl + V Ctrl + M i jest znakiem ASCII powrotu karetki (CR).
Widzimy tutaj, że plik f1 ma trzy linie, ale nie ma CR, więc wszystkie zakończenia linii muszą być solo LF w stylu uniksowym.
Plik f2 ma taką samą liczbę linii i CR, więc rozsądne jest odgadnięcie, że używa on końcówek linii CR, LF używanych przez MSDOS i Windows.
file -m magicfile f1 f2 f3
W systemie Windows szybkim sposobem na sprawdzenie jest otwarcie pliku w Notatniku. Notatnik pokaże podział linii tylko na zakończeniach w stylu Windows (CR + LF), a nie na zakończeniach unixowych (LF). Twój tekst uniksowy będzie wyglądał następująco:
Line1Line2Line3Line4
podczas gdy tekst Windows będzie wyglądał następująco:
line1
line2
line3
line4
Nie znam się na platformie unix / linux, ale jestem pewien, że możesz używać podobnych hacków z programami takimi jak gedit lub 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
Zauważ, że ze względu na szybkość liczone są tylko pojedyncze \rlitery \nsi, ale byłby to dość zwariowany plik, który miałby taką samą liczbę obu typów, a mimo to nie był plikiem Windows CRLF ...
Zauważ też, że narzędzie * nix filenie wykonuje pełnego skanu pliku, podczas gdy ten perlskrypt to robi. Nie wspomniałeś, na której platformie ma działać; Użyłem bashskryptu do przetestowania danych wyjściowych Perla, ale można go zmienić na cmdskrypt Windows .
Możesz po prostu przesłać do niego swój plik.
filenie wyświetla statusu zakończenia linii, jeśli może znaleźć dopasowanie bliższe niż ASCII, tjsetup.py: a python script text executable. Nie można znaleźć flagi, która zmieni to zachowanie.