Rimuovere ^M da script o altri files di testo

10 05 2008

A volte succede che file creati con Windows e poi trasferiti con Linux abbiano una formattazione sbagliata. Da quanto sapevo Windows usa sia un carriage return che un newline, mentre Linux solo il newline. O era il contrario?

Comunque sia, a me è successa una strana cosa. Stavo editando un file, un po’ con Emacs, un po’ con gedit e ad un certo punto mi sono ritrovato con errori di compilazione (il file era uno script). In particolare diceva

/usr/bin/env bash^M: bad interpreter: no such file or directory

E andando a vedere il file, al termine di ogni riga compariva il carattere ^M. Una rapida ricerca mi ha permesso di vedere che accade raramente, ma una semplice riga in sed ha risolto il problema:

sed -i s/{ctrl+v}{ctrl+m}// nomefile

E’ ovvio che al posto di {ctrl+v}{ctrl+m} dovremo premere i tasti corrispondenti; comunque sia ha funzionato benissimo.