Devo sostituire alcuni caratteri non stampabili con spazi nel file.
In particolare, tutti i caratteri 0x00
fino a 0x1F
, tranne 0x09
(TAB), 0x0A
(nuova riga), 0x0D
(CR)
Fino ad ora, dovevo solo sostituire il 0x00
personaggio. 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 sed
comando.
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_OUT
Ho pensato che
perl -p
funziona 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_OUT
Mi dice:
sed: -e espressione # 1, carattere 34: carattere di confronto non valido
perl -p
stampa il prodotto finalestdin
dopo aver eseguito le operazioni desiderate, in questo caso è solo una sostituzione.sed
Il regex potrebbe essere diverso daperl
.