it-swarm.com.de

So suchen Sie nach dem Sonderzeichen NUL (^ @ ^ @ ^ @)

Datei:

O000000667520994000000074720121112000000N^@^@^@ 

Ich habe den folgenden Befehl verwendet, aber er funktioniert nicht.

grep "^@^@^@" *
23
user1580770

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' ...
44
Guest

^@ ist kein Karat ^ und at-sign @, es ist ein Zeichen. So zeigen einige Programme das NUL-Zeichen an - ASCII-Wert 0, in C auch als \0 bezeichnet.

Hier habe ich eine Datei mit einem NUL-Byte erstellt. Beachten Sie, dass ich cat -v verwende, um nicht druckbare Zeichen anzuzeigen.

$ 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^@

 In vi drücken Sie im Einfügemodus Ctrl-VCtrl-Shift-@ um ein Null-Byte einzufügen.

11
John Kugelman

Wenn grep -P nicht funktioniert (z. B. unter OS X), versuchen Sie Folgendes:

grep -E '\x00' ...
2
robinst

In bash können Sie Sonderzeichen mit dem Präfix C-q oder C-v hinzufügen. So können Sie zum Beispiel

grep 'Ctrl-vCtrl-a' file.txt

Die Suchzeichenfolge sollte als control key + character v gelesen werden, gefolgt von control key + character a, der nach dem ASCII-Wert SOH (01) sucht. Leider funktioniert dies nicht für den NUL-Charakter.

1
Olaf Dietsche