Grep
grep 應該在文件中找到一個十六進制值,但沒有
這是文件的開頭:
# hexdump -n 550 myFile 0000000 f0f2 f5f0 f7f9 f1f1 f1f0 f0f0 e3f1 f3c8 0000010 f3f5 0000 0000 000c 0000 0000 0000 000c 0000020 0000 0c00 0000 0000 0000 0c00 0000 0000 0000030 000c 0000 0000 0000 000c 0000 0c00 0000 0000040 0000 0000 0c00 0000 0000 000c 0000 0000 0000050 0000 000c 0000 0c00 0000 0000 0000 0c00 0000060 0000 0000 000c 0000 0000 0000 000c 0000 * 00000b0 0000 0000 000c 0000 0000 0000 0000 0000 00000c0 0000 0000 0000 0c00 0000 0000 0000 0c00 00000d0 0000 0000 000c 0000 0000 0000 000c 0000 00000e0 0c00 0000 0000 0000 0c00 0000 0000 000c 00000f0 0000 0000 0000 000c 0000 0c00 0000 0000 0000100 0000 0c00 0000 0000 000c 0000 0000 0000 0000110 000c 0000 0c00 0000 0000 0000 0c00 0000 0000120 0000 0000 0c00 0000 0000 0000 0c00 0000 * 0000160 0000 0000 0c00 0000 0000 0000 0000 0000 0000170 0000 0000 0000 0000 000c 0000 0000 0000 0000180 000c 0000 0c00 0000 0000 0000 0c00 0000 0000190 0000 000c 0000 0000 0000 000c 0000 0c00 00001a0 0000 0000 0000 0c00 0000 0000 000c 0000 00001b0 0000 0000 000c 0000 0c00 0000 0000 0000 00001c0 0c00 0000 0000 000c 0000 0000 0000 000c 00001d0 0000 0000 0000 000c 0000 0000 0000 000c * 0000210 0000 0000 0000 000c 0000 0000 0000 0000 0000220 0000 0000 0a00 0000226
我們可以在其中看到十六進制值
0c
和0a
我不明白為什麼 grep 找到
0c
但沒有0a
:# grep -P '\x0c' myFile Fichier binaire myFile correspondant # grep -P '\x0a' myFile <nothing in the output>
我正在使用 CentOS。
\x0a
不僅僅是任何十六進制值 - 它是對應於 ASCII 換行符的十六進制值。由於 grep(預設情況下)是基於行的,因此在進行模式匹配之前會去除換行符。至少使用 GNU grep,您可以使用以下
-z
選項更改此行為:-z, --null-data Treat input and output data as sequences of lines, each terminated by a zero byte (the ASCII NUL character) instead of a newline.
但是請注意,這將去除 ASCII 空值,因此您將無法再 grep那些.