Caracteres ASCII são caracteres no intervalo de 0 a 177 (octal), inclusive .
Para excluir caracteres fora deste intervalo em um arquivo, use
LC_ALL=C tr -dc '\0-\177' <file >newfile
O tr
comando é um utilitário que funciona com caracteres únicos , substituindo-os por outros caracteres únicos (transliteração), excluindo-os ou compactando execuções do mesmo caractere em um único caractere.
O comando acima deve ler file
e escrever o conteúdo modificado para newfile
. A -d
opção de tr
fazer o utilitário excluir caracteres (em vez de transliterá-los) e -c
considerar caracteres fora do intervalo especificado (em vez de dentro).
LC_ALL=C
garante que cada valor de byte crie um caractere válido. Sem ele, algumas tr
implementações seriam abortadas se encontrassem sequências de bytes que não formam caracteres válidos na codificação de caracteres do código do idioma.
Para substituir o arquivo original pelo modificado, use
LC_ALL=C tr -dc '\0-\177' <file >newfile &&
mv newfile file
Isso renomeia o novo arquivo para o nome do arquivo antigo após a tr
conclusão com êxito. Se tr
não for concluído com êxito, porque ele não pôde ler o arquivo original ou não gravou no novo arquivo, o arquivo original permanecerá inalterado.
Como alternativa, para preservar o máximo possível dos metadados (permissões etc.) do arquivo original, use
cp file tmpfile &&
LC_ALL=C tr -dc '\0-\177' <tmpfile >file &&
rm tmpfile