Apakah ada cara untuk dengan cepat mengidentifikasi file dengan penghentian jalur Windows atau Unix?

8

Saya tahu kita bisa menggunakan dos2unix untuk mengkonversi antara Windows dan penghentian saluran Unix. Saya bertanya-tanya apakah ada perintah yang dapat memberi tahu saya jika sebuah file memiliki Windows atau Unix line termination?

Oliver
sumber

Jawaban:

11
$ file f1 f2 f3
f1: ASCII text, with CRLF, LF line terminators
f2: ASCII text, with CRLF line terminators
f3: ASCII text

Jika Anda merasa perlu memeriksa setiap baris dalam file, Anda dapat melakukan ini:

$ grep -c "^M" f1 f2
f1:0
f2:3

$ wc -l f1 f2
 3 f1
 3 f2
 6 total

"^ M" dimasukkan menggunakan Ctrl + V Ctrl + M dan merupakan karakter ASCII carriage-return (CR).

Di sini kita melihat bahwa file f1 memiliki tiga baris tetapi tidak ada CR jadi semua akhiran baris haruslah LF solo gaya Unix.

File f2 memiliki jumlah garis dan CR yang sama sehingga masuk akal untuk menebak bahwa ia menggunakan ujung-ujung CR, LF seperti yang digunakan oleh MSDOS dan Windows.

RedGrittyBrick
sumber
1
filetidak mengeluarkan status akhir baris jika dapat menemukan kecocokan yang lebih dekat dari ASCII, yaitu setup.py: a python script text executable. A tampaknya tidak dapat menemukan bendera untuk mengubah perilaku itu.
miracle2k
1
@ miracle2k: Mungkin magicfile kustom dapat dibuat untuk melakukan ini. file -m magicfile f1 f2 f3
RedGrittyBrick
1

Di Windows, cara cepat untuk mengetahui adalah membuka file Anda di Notepad. Notepad akan menunjukkan jeda baris hanya pada terminasi gaya windows (CR + LF), dan bukan unix terminasi (LF). Jadi teks unix Anda akan terlihat seperti ini:

Line1Line2Line3Line4

sedangkan, teks windows akan terlihat seperti ini:

line1
line2
line3
line4

Saya tidak terlalu terbiasa dengan platform unix / linux, tapi saya yakin Anda bisa menggunakan peretasan yang serupa dengan program seperti gedit atau emacs.

Prahlad Yeri
sumber
0
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

Perhatikan, bahwa demi kecepatan, hanya individu \rdan \ns yang dihitung, tetapi itu akan menjadi file yang cukup bagus yang memiliki jumlah yang sama dari kedua jenis dan bukan file Windows CRLF ...

Perhatikan juga bahwa alat * nix filetidak melakukan scane file secara lengkap, sedangkan perlskrip ini tidak. Anda belum menyebutkan platform yang Anda inginkan untuk dijalankan; Saya telah menggunakan bashskrip untuk menguji keluaran perl, tetapi itu dapat diubah menjadi cmdskrip Window .

Anda bisa mem-pipe file Anda ke sana.

Peter.O
sumber