Preciso substituir alguns caracteres não imprimíveis por espaços no arquivo.
Especificamente, todos os caracteres de 0x00
até 0x1F
, exceto 0x09
(TAB), 0x0A
(nova linha), 0x0D
(CR)
Até agora, eu só precisava substituir o 0x00
personagem. Como meu sistema operacional anterior era o AIX (sem comandos GNU), não posso usá-lo sed
(bem, posso, mas ele tem algumas limitações). Então, eu encontrei o próximo comando usando perl
, que funcionou como esperado:
perl -p -e 's/\x0/ /g' $FILE_IN > $FILE_OUT
Agora estou trabalhando no Linux, então esperava poder usar o sed
comando.
Minhas perguntas:
Este comando é apropriado para substituir esses caracteres? Eu tentei e parece funcionar, mas quero ter certeza:
perl -p -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUT
Eu pensei que
perl -p
funciona comosed
. Então, por que o comando anterior funciona (pelo menos, não falha) e o próximo não?sed -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUT
Isso me diz:
expressão sed: -e # 1, caractere 34: caractere de agrupamento inválido
perl -p
imprime o produto finalstdin
após realizar as operações desejadas, neste caso, é apenas uma substituição.sed
A expressão regular de Regex pode ser diferente deperl
.