Datei:
O000000667520994000000074720121112000000N^@^@^@
Ich habe den folgenden Befehl verwendet, aber er funktioniert nicht.
grep "^@^@^@" *
Datei:
O000000667520994000000074720121112000000N^@^@^@
Ich habe den folgenden Befehl verwendet, aber er funktioniert nicht.
grep "^@^@^@" *
Antworten:
Sie können im Perl-Regexp-Modus (-P) anhand des Hex-Codes nach beliebigen Zeichen suchen, einschließlich Steuerzeichen und nicht druckbaren Zeichen:
grep -Pa '\x00' ...
grep -Pv '\x00' file
funktioniert nicht in Cygwin ...
-a
(manchmal?) findet es nicht einmal das Muster. Vielen Dank! Könnte auch @pbies helfen.
^@
ist kein Karat ^
und At -Zeichen @
, es ist ein Charakter. So zeigen einige Programme das Zeichen NUL an - ASCII-Wert 0, auch bekannt als \0
C.
Hier habe ich eine Datei mit einem NUL-Byte erstellt. † Beachten Sie, dass ich cat -v
nicht druckbare Zeichen anzeige.
$ cat -v blah
hello
null^@
hi
$ hexdump -C blah
00000000 68 65 6c 6c 6f 0a 6e 75 6c 6c 00 0a 68 69 0a |hello.null..hi.|
0000000f
Grep hat Probleme, NULs zu finden, da sie zum Beenden von Strings in C. Sed verwendet werden.
$ sed -n '/\x0/p' blah
null
$ sed -n '/\x0/p' blah | cat -v
null^@
† Drücken Sie in vi im Einfügemodus Ctrl- V, Ctrl- Shift- @, um ein Null-Byte einzufügen.
Wenn grep -P
dies nicht funktioniert (z. B. unter OS X), versuchen Sie Folgendes:
grep -E '\x00' ...
grep -Pa '\x00' ...
In bash können Sie Sonderzeichen mit dem Präfix C-q
oder hinzufügen C-v
. So können Sie zum Beispiel
grep 'Ctrl-vCtrl-a' file.txt
Die Suchzeichenfolge sollte als control key
+ gelesen werden character v
, gefolgt von control key
+ character a
, das nach dem ASCII-Wert SOH (01) sucht. Leider funktioniert dies nicht für den NUL-Charakter.
^ @ ist das NUL-Zeichen. Was möchten Sie mit den Zeilen Ihrer Dateien tun, die sie enthalten?
Sie können einen Blick auf /programming/2398393/identifying-and-removing-null-characters-in-unix werfen, der sich mit einem ähnlichen Problem befasst.
Das Zeichen ^ @ ist das NUL-Zeichen, daher befürchte ich, dass es nicht direkt abgegriffen werden kann.
Ihre beste Option wäre wahrscheinlich, ein einfaches Programm zu schreiben, das nach dieser Folge von Bytes sucht.
Alternativ können Sie versuchen, es in irgendeine Form von Hex - Dump (zu konvertieren od
, xxd
oder so) und grep in den Ausgang davon. Aber ehrlich gesagt, wäre es schwierig, es richtig zu machen.
-a
Option hinzufügen , dagrep
dies ansonsten Binärdaten sind und die übereinstimmenden Zeilen nicht angezeigt werden.