Como posso fazer uma pesquisa binária de um arquivo de texto para uma cadeia de caracteres específica?

3

Eu tenho um arquivo de texto que contém um grande número de registros, cada um em uma única linha. Alguns dos registros têm caracteres especiais que foram corrompidos e estou tentando localizá-los procurando por várias sequências de caracteres maiores que x80

Aqui está uma amostra de linha única com os caracteres incorretos destacados:

Acadeiahexadecimaldeinteresseé:

49CC80C2B96E

QuandoeuusooGNUGrep,grep--color='auto'-P-n"[\x80-\xFF]" record.txt corresponde somente a parte da linha, ele corresponde ao sobrescrito 1 ( ¹ ) mas não ao Ì :

Ogrepnãoparecesercapazdequebrarocaracterecombinado+diacríticos...

Oqueeugostariadefazerémanterapenasaslinhasquetêmdoisoumaiscaracteresx80consecutivos-esercapazdecombinarcomcaracteresreaisqueaparecemnocódigohexadecimal-ouseja,49CC80C2B96Eparecedevecorresponderaalgocomo"[\x80-\xFF]{2,10}" - mas essa correspondência não funciona.

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

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

Mas quando eu uso isso, não:

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

O segundo também não deve coincidir, já que a seqüência de bytes é CC 80 C2 B9 , que é uma sequência de 4 bytes consecutivos com os valores de x80-xFF ?

    
por cwd 12.02.2016 / 23:27

2 respostas

1

Isso pode estar relacionado ao local. Em caso afirmativo, usar a localidade C (POSIX), onde os caracteres são bytes, pode funcionar:

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

O grep pode ser complicado com personagens 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 usar o utf-16 e o utf-8.

E certifique-se de que seu console é capaz de manipular o uft-8 e não está atribuído a nenhuma configuração ansi.

    
por 13.02.2016 / 01:33

Tags