Eu tenho um grande arquivo de texto utf-8 com o qual pesquiso frequentemente grep
. Recentemente, grep
começ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 diff
eles, 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.
nul
e alguns Esc
s. Eu tentei grepping para eles. Eu consegui encontrar o esc
s ( \x1B
), mas o nul
nunca apareceu. O teste acima mostrou 1, para a linha que contém Esc
s, 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 nul
s no seu arquivo). (Além disso, você pode ser melhor fora de usar [[:cntrl:]]
.)
sed -z 's/.*\(....\)$/\1/' foo | od -c
ver alguns caracteres antes do NUL
(se houver), o que pode levar você ao problema.
sed
não tem uma -z
opção: sed: invalid option -- 'z'
.