Preciso substituir alguns caracteres não imprimíveis por espaços no arquivo.
Especificamente, todos os caracteres de 0x00até 0x1F, exceto 0x09(TAB), 0x0A(nova linha), 0x0D(CR)
Até agora, eu só precisava substituir o 0x00personagem. 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 sedcomando.
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_OUTEu pensei que
perl -pfunciona 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_OUTIsso me diz:
expressão sed: -e # 1, caractere 34: caractere de agrupamento inválido
perl -pimprime o produto finalstdinapós realizar as operações desejadas, neste caso, é apenas uma substituição.sedA expressão regular de Regex pode ser diferente deperl.