J'ai un grand fichier texte utf-8 avec lequel je recherche fréquemment grep
. Récemment, j'ai grep
commencé à signaler qu'il s'agissait d'un fichier binaire. Je peux continuer à le rechercher avec grep -a
, mais je me demandais avec quel changement il a décidé que le fichier était maintenant binaire.
J'ai une copie du mois dernier où le fichier n'est plus détecté comme binaire, mais ce n'est pas pratique pour diff
eux car ils diffèrent sur> 20 000 lignes.
file
identifie mon fichier comme
Texte anglais UTF-8 Unicode, avec de très longues lignes
Comment trouver les caractères / lignes / etc. dans mon fichier qui déclenchent ce changement?
La question similaire, non dupliquée 19907 couvre la possibilité de NUL mais grep -Pc '[\x00-\x1F]'
dit que je n'ai pas de NUL ou d'autres chaarcteurs de contrôle ANSI.
nul
et quelques Esc
s. J'ai essayé de les saluer. J'ai pu trouver le esc
s ( \x1B
), mais le nul
ne s'est jamais présenté. Le test donné ci-dessus a montré 1, pour la ligne contenant Esc
s, mais rien pour une plage qui n'en contenait pas \x1B
. Je ne ferais pas confiance à ce test. Essayez à la grep -zc .
place (devrait être un de plus que le nombre de nul
s dans votre fichier). (En outre, il vaut peut-être mieux utiliser [[:cntrl:]]
.)
sed -z 's/.*\(....\)$/\1/' foo | od -c
de voir quelques caractères avant NUL
(s'il y en a un), ce qui pourrait vous conduire au problème.
sed
n'a pas l' -z
option: sed: invalid option -- 'z'
.