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 tr
comando 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 file
y escribiría el contenido modificado newfile
. La -d
opción tr
hace que la utilidad elimine caracteres (en lugar de transcribirlos) y -c
hace que considere caracteres fuera del intervalo dado (en lugar de dentro).
LC_ALL=C
se asegura de que cada valor de byte constituya un carácter válido. Sin ella, algunas tr
implementaciones 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 tr
haya completado con éxito. Si tr
no 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