Wiem, że możemy użyć dos2unix do konwersji między zakończeniem linii Windows i Unix. Zastanawiam się, czy istnieje jakieś polecenie, które może mi powiedzieć, czy plik ma zakończenie linii w systemie Windows lub Unix?
8
$ 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
nie 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.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:
podczas gdy tekst Windows będzie wyglądał następująco:
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.
źródło
Zauważ, że ze względu na szybkość liczone są tylko pojedyncze
\r
litery\n
si, 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
file
nie wykonuje pełnego skanu pliku, podczas gdy tenperl
skrypt to robi. Nie wspomniałeś, na której platformie ma działać; Użyłembash
skryptu do przetestowania danych wyjściowych Perla, ale można go zmienić nacmd
skrypt Windows .Możesz po prostu przesłać do niego swój plik.
źródło