File di Testo, Codifica ASCII, Unix (unix2dos) e Dos (dos2unix)

29 Aprile 2017 di Daniele Frulla


Quante volte hai avuto il bisogno di eseguire uno script in Linux? Hai editato il file di testo con windows e sfortunatamente il tuo script genera un errore nell’esecuzione…

I files di testo sono semplicissimi file ove al proprio interno vengono collocati caratteri ASCII. I caratteri ASCII possono essere visibili (alfabeto, punteggiatura, numeri) o invisibili (caratteri particolari per indicare un ritorno a capo o nuova riga).

unix2dos

Sembrerebbe che tutti i sistemi operativi potessero utilizzare il medesimo standard per definire un file di testo, eppure non è stato così.

Il problema era il definire quale carattere dovesse indicare il ritorno a capo a fine riga. Alla fine le scelte sono state diverse per i vari sistemi operativi:

  • DOS: ha scelto CR+LF
  • Unix: ha scelto LF

CR in binario 0001101 indica il carattere Carriage Return.

LF in binario 0001010 indica Line Feed.

Mettere un solo carattere che indichi la fine linea è sicuramente più vantaggioso che metterne due, ma evidentemente ad alcuni sistemi operativi servivano 2 caratteri per esempio per gestire le testine delle stampanti ad aghi.

Quando aprite un file su sistemi Linux o Windows fate bene attenzione!

Per trasformare un file di testo Dos in formato Unix vi sono diverse strade:

  • Utilizzare il software

dos2unix inputfile > outputfile

  • Utilizzare lo script:

sed -e ‘s/\r$//’ inputfile > outputfile # DOS -> UNIX (rimuove CR)

Per trasformare un file di testo Unix in formato Dos:

  • Utilizzare il software

unix2dos inputfile

  • Utilizzare lo script:

sed -e ‘s/$/\r/’ inputfile > outputfile # UNIX -> DOS (aggiunge CR)

Quindi state molto attenti quando lanciate uno script in Linux. Se vedete un carattere del tipo ^M probabilmente il file è stato editato con un notepad windows!


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


Copyright di Caterina Mezzapelle Part. I.V.A. 02413940814 - R.E.A. 191812