有没有办法检测sed中的空字节(bytes,NUL,\ 0)?


15

另一个问题有关,为了模糊地检测二进制文件,有没有一种方法可以检测到␀个字节sed


在GNU sed中,是的,但是请注意,在许多unice上,文本实用程序均无法处理空字节。
吉尔斯(Gilles)'所以

Answers:


17

例:

证明我正在发送一个NUL字节,后跟换行符:

$ echo -e \\0 | hexdump -C
00000000  00 0a                                             |..|
00000002

现在,我将NUL字节更改为!感叹号:

$ echo -e \\0 | sed 's/\x00/!/' | hexdump -C
00000000  21 0a                                             |!.|

因此,诀窍是使用\x00NUL字节。


3
echo -ne \\0可以避免换行。
l0b0 2012年

替换hexdump -Cuniname -bcepu以查看转储的字符。
l0b0 2012年

6
应该提到的是这\x是一个非标准的sed扩展,但是GNUsed确实提供了它。
2012年

6
还应该提到的echo -e是一种bashismprintf更兼容。
jofel 2012年

7

是的,该模式\x00与空字节匹配。

例:

$ printf "\0\n\0\n" > file
$ sed -e 's/\x00/test/' -i file
$ cat file
test
test
$  

@ l0b0:之所以对我有用,是因为我使用了zsh。根据POSIX,它将替换\0为零字节。此替换不是必需的(“应支持”),实际上bash不直接支持它。为此,您需要使用echo -e。我在回答echo中用替换,printf这似乎更兼容...
jofel 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.