Title: Convertire un file di testo dalla codifica DOS a quella UNIX
Author: Sandro Tosi
Last modified: 2007-05-26 (2005-01-05 2004-06-14)
I sistemi DOS/Windows utilizzano due caratteri per definire al fine di
una riga: il Line Feed (LF) ed il Carriage Return (CR), ed infatti il
fine riga si indica con LF/CR. Invece, Unix utilizza solo il LF per
definire il termine della riga. Questa disparita` genera spesso dei
problemi, come la presenza dei famosi ``^M'' dei file editati da
Windows e poi aperti su un sistema Linux, oppure l'ammassarsi di tutte
le linee su una sola quando un file creato sotto Unix viene aperto da
un editor poco evoluto sotto Windows
Per verificare che un file contenga effettivamente questi caratteri si
puo` utilizzare sia vi che cat:
# cat -vte $file_name
(che stampa a video anche la rappresentazione dei caratteri
non-printable) oppure
# vi -b $file_name
che edita il file in formato binario, che consente di vedere anche i
caratteri normalmente non visibili.
Per eliminare quei ``^M'' e` possibile usare il comando `tr' che
elimina o traduce dei caratteri da una stringa o da un file; l'opzione
`-d' consente di eliminare un carattere, ed il codice del Carriage
Return e` 015: dunque, per eliminare il CR dai file si deve eseguire
# tr -d '\015' < file_dos.txt > file_unix.txt
oppure
# tr -d '\r' < file_dos.txt > file_unix.txt (<<-- meno sicuro)
Esistono inoltre i programmi `dos2unix' e `tofromdos', che eseguono lo
stesso compito; inoltre anche sed consente di eliminare i ``^M'':
# sed 's/^M//' $file_to_convert > $output_file
in realta` sarebbe piu` corretto utilizzare questa forma:
# sed 's/^M$//' $file_to_convert > $output_file
in quanto identifica solo i ``^M'' a fine riga. Per ottenere il ``^M''
a riga di comando si deve usare la sequenza di escape Ctrl+V Ctrl+M.
Anche vi/vim consentono di rimuovere il ritorno a capo di windows:
- editare il file con vi/vim
- in modalita` comando, inserire:
:%s/^M/ /g
dove il carattere ^M si ottiene con Ctrl+V + Ctrl+M
Per fare il passaggio inverso, si puo` aprire il file con `Word' o con
`wordpad', editor piu` evoluti di `notepad', in grado di capire la
diversa codifica e di apportarvi ``rimedio''. |