¿Cómo puedo hacer una búsqueda binaria de un archivo de texto para una cadena de caracteres específica?

¿Cómo puedo hacer una búsqueda binaria de un archivo de texto para una cadena de caracteres específica?

Tengo un archivo de texto que contiene una gran cantidad de registros, cada uno en una sola línea. Algunos de los registros tienen caracteres especiales que han sido dañados y estoy intentando encontrarlos buscando múltiples secuencias de caracteres superiores ax80

Aquí hay un ejemplo de una sola línea con los caracteres incorrectos resaltados:

ingrese la descripción de la imagen aquí

La cadena hexadecimal de interés es:

49 CC 80 C2 B9 6E

Cuando uso GNU Grep, grep --color='auto' -P -n "[\x80-\xFF]" record.txtcoincide solo con una parte de la línea, coincide con el superíndice 1 ( ¹) pero no con Ì:

ingrese la descripción de la imagen aquí

Grep no parece ser capaz de separar el carácter combinado + diacrítico...

Lo que me gustaría hacer es conservar solo las líneas que tienen dos o más x80caracteres consecutivos, y poder hacer coincidir los caracteres reales que aparecen en el código hexadecimal, es decir, 49 CC 80 C2 B9 6Eparece que debería coincidir con algo así "[\x80-\xFF]{2,10}", pero esta coincidencia no no trabajo.

Entonces, para aclarar, cuando uso esto, la línea coincide:

grep --color='auto' -P -n "[\x80-\xFF]" record.txt

Pero cuando uso esto, no:

grep --color='auto' -P -n "[\x80-\xFF]{2,10}" record.txt

¿No debería coincidir también el segundo, ya que la secuencia de bytes es CC 80 C2 B9una cadena de 4 bytes consecutivos con los valores de x80-xFF?

Respuesta1

Esto podría estar relacionado con la configuración regional. Si es así, usar la configuración regional C (también conocida como POSIX), donde los caracteres son bytes, puede funcionar:

LC_ALL=C grep --color='auto' -P -n "[\x80-\xFF]{2,10}" record.txt

Respuesta2

Grep puede resultar complicado con caracteres extraños... prueba:

grep --color='auto' -P -n "[\x80-\xFF]" record.txt |  iconv -f utf-16 -t utf-16

Puede que recupere tus letras... pero tus colores se perderán. Podría valer la pena jugar con utf-16 y utf-8.

Y asegúrese de que su consola pueda manejar uft-8 y no esté asignada a alguna configuración ansi.

información relacionada