Ho un grande file di testo utf-8 con cui cerco frequentemente grep
. Di recente ha grep
iniziato a segnalare che si trattava di un file binario. Posso continuare a cercarlo con grep -a
, ma mi chiedevo quale modifica ha fatto decidere che il file era ora binario.
Ne ho una copia dello scorso mese in cui il file non viene più rilevato come binario, ma non è pratico per diff
loro poiché differiscono su> 20.000 righe.
file
identifica il mio file come
Testo inglese Unicode UTF-8, con linee molto lunghe
Come posso trovare i caratteri / linee / ecc. nel mio file che stanno innescando questa modifica?
La domanda simile, non duplicata 19907, copre la possibilità di NUL, ma grep -Pc '[\x00-\x1F]'
afferma che non ho NUL o altri capitani di controllo ANSI.
nul
alcuni Esc
s. Ho provato a prenderlo per loro. Sono riuscito a trovare esc
s ( \x1B
), ma nul
non è mai stato visualizzato. Il test sopra riportato mostrava 1, per la riga contenente Esc
s, ma nulla per qualsiasi intervallo che non contenesse \x1B
. Non mi fiderei di quel test. Prova grep -zc .
invece (dovrebbe essere uno in più rispetto al numero di nul
s nel tuo file). (Inoltre, potresti stare meglio usando [[:cntrl:]]
.)
sed -z 's/.*\(....\)$/\1/' foo | od -c
a vedere alcuni caratteri prima del NUL
(se ce n'è uno), il che potrebbe portare al problema.
sed
non dispone di -z
un'opzione: sed: invalid option -- 'z'
.