Como posso fazer uma pesquisa binária em um arquivo de texto para uma sequência de caracteres específica?

Como posso fazer uma pesquisa binária em um arquivo de texto para uma sequência de caracteres específica?

Tenho um arquivo de texto que contém um grande número de registros, cada um em uma única linha. Alguns dos registros possuem caracteres especiais que foram corrompidos e estou tentando encontrá-los procurando por múltiplas sequências de caracteres superiores ax80

Aqui está um exemplo de linha única com os caracteres incorretos destacados:

insira a descrição da imagem aqui

A string hexadecimal de interesse é:

49 CC 80 C2 B9 6E

Quando eu uso o GNU Grep, grep --color='auto' -P -n "[\x80-\xFF]" record.txtele corresponde apenas a parte da linha, corresponde ao sobrescrito 1 ( ¹), mas não ao Ì:

insira a descrição da imagem aqui

Grep não parece ser capaz de separar o caractere + diacrítico combinado ...

O que eu gostaria de fazer é manter apenas as linhas que possuem dois ou mais x80caracteres consecutivos - e poder corresponder aos caracteres reais que aparecem no código hexadecimal - ou seja, 49 CC 80 C2 B9 6Eparece que deveria corresponder a algo como "[\x80-\xFF]{2,10}"- mas essa correspondência não não funciona.

Então, para esclarecer, quando uso isso, a linha corresponde:

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

Mas quando eu uso isso, isso não acontece:

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

O segundo também não deveria corresponder, já que a sequência de bytes é CC 80 C2 B9uma sequência de 4 bytes consecutivos com os valores de x80-xFF?

Responder1

Isso pode estar relacionado ao local. Nesse caso, usar o código de idioma C (também conhecido como POSIX), onde os caracteres são bytes, pode funcionar:

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

Responder2

Grep pode ser instável com caracteres estranhos.. tente:

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

Pode receber suas cartas de volta... mas suas cores serão perdidas. Pode valer a pena mexer com o utf-16 e o ​​utf-8.

E certifique-se de que seu console seja capaz de lidar com o uft-8 e não esteja atribuído a alguma configuração ansi.

informação relacionada