Los caracteres ASCII son caracteres en el rango de 0 a 177 (octal) inclusive .
Para eliminar caracteres fuera de este rango en un archivo, use
LC_ALL=C tr -dc '\0-\177' <file >newfile
El trcomando es una utilidad que funciona en caracteres individuales , ya sea sustituyéndolos con otros caracteres individuales (transliteración), eliminándolos o comprimiendo ejecuciones del mismo carácter en un solo carácter.
El comando anterior leería filey escribiría el contenido modificado newfile. La -dopción trhace que la utilidad elimine caracteres (en lugar de transcribirlos) y -chace que considere caracteres fuera del intervalo dado (en lugar de dentro).
LC_ALL=Cse asegura de que cada valor de byte constituya un carácter válido. Sin ella, algunas trimplementaciones abortarían si encontraran secuencias de bytes que no forman caracteres válidos en la codificación de caracteres de la configuración regional.
Para reemplazar el archivo original con el modificado, use
LC_ALL=C tr -dc '\0-\177' <file >newfile &&
mv newfile file
Esto cambia el nombre del nuevo archivo al nombre del archivo anterior después de que se trhaya completado con éxito. Si trno se completa correctamente, ya sea porque no pudo leer el archivo original o no pudo escribir en el nuevo archivo, el archivo original no se modificará.
Alternativamente, para preservar la mayor cantidad posible de los metadatos (permisos, etc.) del archivo original, use
cp file tmpfile &&
LC_ALL=C tr -dc '\0-\177' <tmpfile >file &&
rm tmpfile