Ho un grande file di testo utf-8 con cui cerco frequentemente grep. Di recente ha grepiniziato 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 diffloro 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.
nulalcuni Escs. Ho provato a prenderlo per loro. Sono riuscito a trovare escs ( \x1B), ma nulnon è mai stato visualizzato. Il test sopra riportato mostrava 1, per la riga contenente Escs, 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 nuls nel tuo file). (Inoltre, potresti stare meglio usando [[:cntrl:]].)
sed -z 's/.*\(....\)$/\1/' foo | od -ca vedere alcuni caratteri prima del NUL(se ce n'è uno), il che potrebbe portare al problema.
sednon dispone di -zun'opzione: sed: invalid option -- 'z'.