Fichier:
O000000667520994000000074720121112000000N^@^@^@
J'ai utilisé la commande ci-dessous mais cela ne fonctionne pas.
grep "^@^@^@" *
Vous pouvez grep pour tout caractère, y compris les caractères de contrôle/non imprimables, en mode Perl-regex (-P) grâce à son code hexadécimal:
grep -Pa '\x00' ...
^@
n'est pas un carat ^
et at-sign @
, c'est un caractère. C'est la façon dont certains programmes affichent le caractère NUL - valeur ASCII 0, également appelé \0
en C.
Ici, j'ai créé un fichier contenant un octet NUL.† Notez que j'utilise cat -v
pour afficher les caractères non imprimables.
$ 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 a du mal à trouver des NUL car ils sont habitués à terminer les chaînes de caractères en C. Sed peut toutefois faire le travail:
$ sed -n '/\x0/p' blah
null
$ sed -n '/\x0/p' blah | cat -v
null^@
† Dans vi, en mode insertion, appuyez sur Ctrl-V, Ctrl-Shift-@ insérer un octet nul.
Si grep -P
ne fonctionne pas (par exemple sous OS X), essayez ceci:
grep -E '\x00' ...
Dans bash, vous pouvez ajouter des caractères spéciaux avec le préfixe C-q
ou C-v
. Donc vous pouvez, par exemple
grep 'Ctrl-vCtrl-a' file.txt
La chaîne de recherche doit être lue comme suit: control key
+ character v
, suivie de control key
+ character a
, qui recherche ASCII valeur SOH (01). Malheureusement, cela ne fonctionne pas pour le personnage NUL.