Eu tenho um grande arquivo de texto utf-8 com o qual pesquiso frequentemente grep. Recentemente, grepcomeçou a relatar que era um arquivo binário. Posso continuar pesquisando grep -a, mas fiquei imaginando com que alteração decidi que o arquivo agora era binário.
Eu tenho uma cópia do mês passado em que o arquivo não é mais detectado como binário, mas não é prático para diffeles, pois eles diferem em> 20.000 linhas.
file identifica meu arquivo como
Texto em UTF-8 Unicode em inglês, com linhas muito longas
Como posso encontrar os caracteres / linhas / etc. no meu arquivo que está acionando essa alteração?
A pergunta similar, não duplicada, 19907, cobre a possibilidade de NUL, mas grep -Pc '[\x00-\x1F]'diz que eu não tenho NUL ou quaisquer outros chaarcters de controle ANSI.
nule alguns Escs. Eu tentei grepping para eles. Eu consegui encontrar o escs ( \x1B), mas o nulnunca apareceu. O teste acima mostrou 1, para a linha que contém Escs, mas nada para qualquer faixa que não contenha \x1B. Eu não confiaria nesse teste. Tente em grep -zc .vez disso (deve ser um a mais que o número de nuls no seu arquivo). (Além disso, você pode ser melhor fora de usar [[:cntrl:]].)
sed -z 's/.*\(....\)$/\1/' foo | od -cver alguns caracteres antes do NUL(se houver), o que pode levar você ao problema.
sednão tem uma -zopção: sed: invalid option -- 'z'.