Devo sostituire alcuni caratteri non stampabili con spazi nel file.
In particolare, tutti i caratteri 0x00fino a 0x1F, tranne 0x09(TAB), 0x0A(nuova riga), 0x0D(CR)
Fino ad ora, dovevo solo sostituire il 0x00personaggio. Dato che il mio sistema operativo precedente era AIX (senza comandi GNU), non posso usarlo sed(bene, ma ho avuto alcune limitazioni). Quindi, ho trovato il prossimo comando usando perl, che ha funzionato come previsto:
perl -p -e 's/\x0/ /g' $FILE_IN > $FILE_OUT
Ora sto lavorando su Linux, quindi mi aspettavo di poter usare il sedcomando.
Le mie domande:
Questo comando è appropriato per sostituire quei caratteri? Ho provato, e sembra funzionare, ma voglio essere sicuro:
perl -p -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUTHo pensato che
perl -pfunziona comesed. Quindi, perché il comando precedente funziona (almeno, non fallisce) e il successivo no?sed -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUTMi dice:
sed: -e espressione # 1, carattere 34: carattere di confronto non valido
perl -pstampa il prodotto finalestdindopo aver eseguito le operazioni desiderate, in questo caso è solo una sostituzione.sedIl regex potrebbe essere diverso daperl.