Ich habe eine Textdatei mit unerwünschten Nullzeichen (ASCII NUL, \0
). Wenn ich versuche, es in anzuzeigen, vi
sehe ich ^@
Symbole, die in normalem Text verschachtelt sind. Wie kann ich:
Identifizieren Sie, welche Zeilen in der Datei Nullzeichen enthalten? Ich habe versucht, nach
\0
und zu greifen\x0
, aber das hat nicht funktioniert.Nullzeichen entfernen? Laufen
strings
auf der Datei reinigte ihn, aber ich frage mich nur , wenn dies der beste Weg?
unix
shell
null
special-characters
Dogbane
quelle
quelle
Antworten:
Ich würde verwenden
tr
:Wenn Sie sich fragen, ob die Umleitung von Eingaben in der Mitte der Befehlsargumente funktioniert, ist dies der Fall. Die meisten Schalen werden erkennen , und befassen sich mit E / A - Umleitung (
<
,>
, ...) überall in der Befehlszeile, eigentlich.quelle
tr -d '\000' < file-with-nulls > file-without-nulls
da<
es Teil der Shell-Pipe-Funktionalität ist und nichttr
.cat |
. Eine gute, saubere Lösung, die mein Problem gelöst hat.Verwenden Sie den folgenden Befehl sed, um die Nullzeichen in einer Datei zu entfernen.
Diese Lösung bearbeitet die Datei an ihrem Platz. Dies ist wichtig, wenn die Datei noch verwendet wird. Durch Übergeben von -i'ext wird eine Sicherungskopie der Originaldatei mit dem Suffix 'ext' erstellt.
quelle
sed -i
erforderlich , die jedoch möglicherweise leer ist. Fügen Sie in diesen Systemen ein hinzu''
, wie in :sed -i '' 's/\x0//g "$FILE"
.tr
für mich$ sed --version
->sed (GNU sed) 4.7
musste ich den folgenden Aufruf verwenden, um eine Sicherungsdatei mit dem Namenexample.csv.bak
sed -i.bak 's/\x0//g' example.csv
Eine große Anzahl unerwünschter NUL-Zeichen, beispielsweise jedes zweite Byte, zeigt an, dass die Datei in UTF-16 codiert ist und dass Sie sie
iconv
zum Konvertieren in UTF-8 verwenden sollten.quelle
iconv -f UTF-16 -t UTF-8 file
.Ich habe Folgendes entdeckt, das ausgibt, welche Zeilen, falls vorhanden, Nullzeichen haben:
Ein Oktal-Dump kann Ihnen auch sagen, ob es Nullen gibt:
quelle
Wenn die Zeilen in der Datei mit \ r \ n \ 000 enden, müssen Sie die \ n \ 000 löschen und dann die \ r durch \ n ersetzen.
quelle
Hier ist ein Beispiel zum Entfernen von NULL-Zeichen mit
ex
(an Ort und Stelle):und für mehrere Dateien:
Für die Rekursivität können Sie die Globbing-Option verwenden
**/*.txt
(sofern diese von Ihrer Shell unterstützt wird).Nützlich für Skripte seit
sed
und seine-i
Parameter ist eine nicht standardmäßige BSD-Erweiterung.Siehe auch: Wie überprüfe ich, ob die Datei eine Binärdatei ist, und lese alle Dateien, die es nicht sind?
quelle
Ich benutzte:
Nullen in der Datei loswerden.
quelle
Ich hatte den gleichen Fehler mit:
Ich habe das Problem gelöst, indem ich die Codierung auf geändert habe
utf-16
quelle