
Eu tenho um comando para substituir os caracteres não imprimíveis e aspas simples de um arquivo, mas está demorando mais para ser executado, pois estou substituindo esses caracteres por vários arquivos e o tamanho dos arquivos é de cerca de 30 GB.
LANG=iso-8859-1 sed -i 's/[^[:print:]]//g;s/'\''//g;s/'//g' $path/EID*_$1.xml
O $path
e $1
passando por parâmetros. Como posso acelerar o processo e há algum outro comando que eu possa usar? Ouvi dizer tr
que o comando é mais rápido em comparação, sed
mas como posso usar o tr
comando na minha situação. ( tr
comando em linha única para todos os arquivos).
Eu tentei este comando:
LANG=iso-8859-1 sed 's/[^[:print:]]//g;s/'\''//g;s/'//g' < $path/EID123_$1.xml > $path/EID123_$1_new.xml
mv -f $path/EID123_$1_new.xml EID123_$1.xml
LANG=iso-8859-1 sed 's/[^[:print:]]//g;s/'\''//g;s/'//g' < $path/EID456_$1.xml > $path/EID456_$1_new.xml;
mv -f $path/EID456_$1_new.xml EID456_$1.xml
para cada arquivo único sem a opção i, mas não está dando o resultado esperado e ainda consigo ver os caracteres não imprimíveis no arquivo.
Responder1
Arquivo binário de entradafoo, e para qualquer caractere que não possa ser impresso (ou algum tipo de espaço), substitua esse char por um espaço e envie a saída para o pipe, onde outrotrsubstitui aspas simples por espaços e, em seguida, gera isso parabar.
tr --complement '[:print:]' ' ' < foo | tr "'" ' ' > bar