File con ctrl-M (^M)

Toglie i CTRL-M da un file importato male (like il dos2unix)

Da riga di comando

cat $FILE_CTRL_M | tr -d '\r'> $FILE_SENZA_CTRL_M

oppure on-fly con il comando

perl -p -n -i -e "s/\r//" $FILE_CTRL_M

All’interno del vi, per ottenere il carattere ^M premere ctrl-v e ctrl-m, il comando di sostituzione eliminerà tutte le occorrenze del carattere.

:s/^M//g

Il mio file ha i ctrl-M?

Testiamo se un file di testo è in formato Unix o Dos:

$ cat dos.txt | od -c| tr -d ' '| grep -q '\\r\\n'
$ echo $?
0
$ cat unix.txt | od -c| tr -d ' '| grep -q '\\r\\n'
$ echo $?
1

Cerca tutti i file con ctrl-M

Definisce il carattere da cercare e esegue il find, una volta trovati i file si può applicare su di essi uno dei precedenti metodi per la pulizia dei ^M, come nell’esempio successivo

CHR13=`echo "x" | awk '{ printf "%c\n",13;}'`

find . -type f -exec grep -l $CHR13$ {} \;

Pulizia massiva dei file con CTRL-M

Cerco in tutti i file con estensione .sh e verifico ed elimino i terminatori di riga ^M

CHR13=`awk 'BEGIN{ printf "%c",13;}'`
find . -type f -name \*.sh -exec grep -l ${CHR13}$ {} \; | \
while read FILE_CTRL_M
do
    echo "Converting : ${FILE_CTRL_M}"
    sed -i 's/\r//g' ${FILE_CTRL_M}
done