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
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êmdoisoumaiscaracteresx80
consecutivos-esercapazdecombinarcomcaracteresreaisqueaparecemnocódigohexadecimal-ouseja,49CC80C2B96E
parecedevecorresponderaalgocomo"[\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
?
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
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.