Risposte:
$ file f1 f2 f3
f1: ASCII text, with CRLF, LF line terminators
f2: ASCII text, with CRLF line terminators
f3: ASCII text
Se ritieni necessario controllare ogni riga del file, puoi farlo:
$ grep -c "^M" f1 f2
f1:0
f2:3
$ wc -l f1 f2
3 f1
3 f2
6 total
La "^ M" è stata inserita usando Ctrl + V Ctrl + M ed è il carattere ASCII di ritorno a capo (CR).
Qui vediamo che il file f1 ha tre righe ma nessun CR, quindi tutte le terminazioni di riga devono essere LF in stile Unix.
Il file f2 ha un numero uguale di righe e CR, quindi è ragionevole indovinare che utilizza le terminazioni di riga CR, LF utilizzate da MSDOS e Windows.
file -m magicfile f1 f2 f3
Su Windows, un modo rapido per dirlo è aprire il file in Blocco note. Blocco note mostrerà le interruzioni di riga solo sulle terminazioni di stile di Windows (CR + LF) e non sulle terminazioni di Unix (LF). Quindi il tuo testo unix sarà simile al seguente:
Line1Line2Line3Line4
al contrario, il testo di Windows sarà simile al seguente:
line1
line2
line3
line4
Non ho molta familiarità con la piattaforma unix / linux, ma sono sicuro che puoi usare hack simili con programmi come gedit o 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
Nota, per amor di velocità, vengono conteggiati solo i singoli \rs \n, ma sarebbe un file piuttosto bizzarro che aveva un numero uguale di entrambi i tipi e tuttavia non era un file CRLF di Windows ...
Si noti inoltre che lo strumento * nix filenon esegue una scansione completa del file, mentre questo perlscript lo fa. Non hai menzionato su quale piattaforma desideri che funzioni; Ho usato lo bashscript per testare l'output di perl, ma questo può essere cambiato in Window cmdscript.
Puoi semplicemente reindirizzare il tuo file ad esso.
filenon genera lo stato di fine riga se riesce a trovare una corrispondenza più vicina di ASCII, ad essetup.py: a python script text executable. Non riesco a trovare una bandiera per cambiare quel comportamento.