mostrar y eliminar todos los caracteres > código ascii 127

mostrar y eliminar todos los caracteres > código ascii 127

¿Cómo puedo mostrar y eliminar todos los caracteres > código ascii 127 de un archivo?

el archivo es unicode de 16 bits

ACTUALIZACIÓN Dennis lo resolvió pero hay una discusión interesante sobre los rangos de números.

Respuesta1

Un enfoque a seguir sería convertir el archivo a dígitos hexadecimales, eliminar los patrones de dígitos que no desea y luego volver a convertir.

$ echo 'A Unicode character: [ñ]' | xxd -p | sed 's/c3b1//' | xxd -r -p
A Unicode character: []

Podrías usar AWK o cualquier otra técnica de manipulación de texto en lugar de sed. Tenga cuidado con las secuencias ambiguas.

Déjame saber si esto se acerca a lo que tienes en mente.

Respuesta2

Mirando hacia atrás a esta pregunta

Parece que usé una de estas líneas al final.

(parece ser la expresión regular de Dennis)

$ xxd -p a.q | tr -d '\n' | sed "s/([0-9a-f]\{4\})/\1 /g" | sed -r "s/(00[8-9a-f][0-9a-f]|[0-9a-f][1-9a-f][0-9a-f][0-9a-f]|[1-9a-f]0[0-9a-f][0-9a-f])//g" | tr -d ' ' | sed "s/(.*)/feff\1/" | xxd -r -p >a.q2

o esto (parece ser mi expresión regular)

$ xxd -p a.q | tr -d '\n' | sed "s/([0-9a-f]\{4\})/\1 /g" | sed -r "s/(00[89A-F][0-9A-F]|0[1-9A-F][0-9A-F]{2}|[1-9A-F][0-9A-F]{3})//g" | tr -d ' ' | sed "s/(.*)/feff\1/" | xxd -r -p >a.q2

Este es un comentario sobre cómo lo resolví, con algunas pruebas.

0080-00FF     00[89A-F][0-9A-F]
0100-0FFF     0[1-9A-F][0-9A-F]{2}
1000-FFFF     [1-9A-F][0-9A-F]{3}

y aquí hay algunas pruebas que muestran que las expresiones regulares funcionan. Los puse en mi pregunta cuando la resolví, pero debería haberlos puesto en una respuesta.

Total de caracteres hexadecimales 85

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/\0 /g" | grep -oE "[0-9A-F]{4}" | wc -l
85

Total que quiero, 72

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/\0 /g" | grep -oE "00[0-7][0-F]" | wc -
l
72

Total que no quiero, 13

$ xxd -p -u a.aa.txt | sed -r "s/[0-9A-F]{4}/\0 /g" | grep -oP '((?!00[0-7][0-9A-F])(?=[^ ]).){4}' | wc -l
13

Total que no quiero, 13

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/\0 /g" | grep -oE "00[89A-F][0-9A-F]|0[1-9A-F][0-9A-F]{2}|[1-9A-F][0-9A-F]{3}" | wc –l
13

información relacionada