PDA

View Full Version : Identificare il tipo di "EOL"


kingv
02-01-2007, 13:10
problema forse banale ma che non riesco a risolvere.
voglio testare una serie di file di testo per sapere quali usano il terminatore di linea DOS (CR+LF) e quale quello unix (LF).
il comando "file" applicato su file di testo lo dice, ma ad esempio su script di shell o altri tipi di file no. Con il "vi" posso saperlo, ma cercavo qualcosa di non interattivo.
idee?

marco.r
02-01-2007, 16:04
Potresti usare qualcosa di simile al seguente:

#!/bin/env python
import sys
if "\r\n" == file(sys.argv[1]).readline()[-2:]:
sys.exit(1)
sys.exit(0)

Si puo' sicuramente fare qualcosa di meglio... ad esempio con grep -c (conti le occorrenze di \r\n), ma non mi viene in mente come inserire caratteri speciali (CR e LF appunto) sulle regular expression scritte da linea di comando.

kingv
02-01-2007, 19:34
col grep non lo puoi fare perchè non hai maniera di testare il terminatore di riga, ma solo il contenuto della stessa.
avevo pensato anch'io usare un paio di righe di codice se non trovavo una soluzione da shell, grazie per l'esempio.

vampirodolce1
03-01-2007, 08:07
Il grep permette di cercare stringe in esadecimale, con la sintassi \xHH?
Se quel valore viene espanso dalla shell si potrebbe fare uno script tramite il quale, se viene trovato il valore 0D0AHex (=CRLF) allora il file e' di MS-DOS, altrimenti e' UNIX.

kingv
03-01-2007, 08:46
Il grep permette di cercare stringe in esadecimale, con la sintassi \xHH?



è vero, ma che io sappia non permette di testare il terminatore di riga.
in altra parole la ricerca esadecimale la fa, ma all'interno del contenuto della riga (e quindi non è applicabile al problema).

dopo comunque faccio una prova e verifico :fagiano: