Ich habe eine große utf-8-Textdatei, mit der ich häufig suche grep
. Vor kurzem wurde grep
berichtet, dass es sich um eine Binärdatei handelt. Ich kann weiter damit suchen grep -a
, aber ich habe mich gefragt, welche Änderung dazu geführt hat, dass die Datei jetzt binär ist.
Ich habe eine Kopie vom letzten Monat, in der die Datei nicht mehr als binär erkannt wird, aber es ist für sie nicht praktikabel, diff
da sie sich in> 20.000 Zeilen unterscheiden.
file
identifiziert meine Datei als
UTF-8 Unicode Englischer Text mit sehr langen Zeilen
Wie finde ich die Zeichen / Zeilen / etc. in meiner Datei, die diese Änderung auslösen?
Die ähnliche, nicht doppelte Frage 19907 deckt die Möglichkeit von NUL ab, grep -Pc '[\x00-\x1F]'
sagt aber , dass ich keine NUL oder andere ANSI-Kontroll-Chaarcter habe.
nul
und einige Esc
s enthält. Ich habe versucht, nach ihnen zu greifen. Ich konnte das esc
s ( \x1B
) finden, aber das ist nul
nie aufgetaucht. Der oben angegebene Test ergab 1 für die Linie, die Esc
s enthält, aber nichts für einen Bereich, der nicht enthält \x1B
. Ich würde diesem Test nicht vertrauen. Versuchen Sie es grep -zc .
stattdessen (sollte eins mehr sein als die Anzahl der nul
s in Ihrer Datei). (Auch könnten Sie besser dran sein [[:cntrl:]]
.)
sed -z 's/.*\(....\)$/\1/' foo | od -c
einige Zeichen vor dem NUL
(falls vorhanden) zu sehen, was Sie möglicherweise zu dem Problem führen könnte.
sed
hat keine -z
Option : sed: invalid option -- 'z'
.