文件:
O000000667520994000000074720121112000000N^@^@^@
我使用了以下命令,但是它不起作用。
grep "^@^@^@" *
文件:
O000000667520994000000074720121112000000N^@^@^@
我使用了以下命令,但是它不起作用。
grep "^@^@^@" *
Answers:
您可以通过其十六进制代码对perl-regexp模式(-P)中的任何字符(包括控制/不可打印字符)进行grep表示:
grep -Pa '\x00' ...
grep -Pv '\x00' file
在Cygwin中不起作用...
-a
(有时?),甚至找不到模式。谢谢!也可能会帮助@pbies。
^@
不是克拉^
符号@
,而是一个字符。这就是某些程序如何显示NUL字符-ASCII值0,\0
在C中也称为。
在这里,我创建了一个包含NUL字节的文件。†注意,我cat -v
用来显示非打印字符。
$ 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很难找到NUL,因为NUL用于终止C中的字符串。但是,Sed可以做到这一点:
$ sed -n '/\x0/p' blah
null
$ sed -n '/\x0/p' blah | cat -v
null^@
†在VI,在插入模式下按Ctrl- V,Ctrl- Shift- @插入一个空字节。
在bash中,您可以在带有C-q
或前缀时添加特殊字符C-v
。所以你可以,例如
grep 'Ctrl-vCtrl-a' file.txt
搜索字符串应读取为control key
+ character v
,后跟control key
+ character a
,以搜索ASCII值SOH(01)。不幸的是,这不适用于NUL字符。
^ @是NUL字符。您想对包含该文件的文件行做什么?
您可以看看 /programming/2398393/identifying-and-removing-null-characters-in-unix中涉及类似问题的内容。
-a
选项,否则grep
认为它是二进制数据,并且不会显示匹配的行。