Grep

grep -z:為什麼 0 沒有結果?

  • February 16, 2022

設想:

$ cat t0.txt
xxx
yyy

$ man grep | grep '\-\-null\-data' -A1
      -z, --null-data
             Treat the input as a set of lines, each terminated by a zero byte (the ASCII NUL character) instead of a newline.

$ grep -Pzo 'xxx\0yyy' t0.txt
<nothing>

$ grep -Pzo 'xxx\nyyy' t0.txt
xxx
yyy

那麼,如果 grep “將輸入視為一組行,每行都以零字節結尾”,那麼為什麼'xxx\0yyy'不產生任何結果呢?

grep加工線;預設情況下,它們由 分隔\n,並且該-z選項告訴grep它應該\0用作行分隔符。

-z 描述提供給的數據grep;它不會改變饋送到的數據grep。您可以將它與真正\0用作分隔符的數據一起使用,例如find -print0.

即使您的輸入數據確實包含\0,您也無法grep使用\0-z選項:grep在行內查找匹配項,因此它無法匹配行分隔符。您的\n模式有效,因為您的輸入包含它並且 grep沒有\n用作行分隔符(因為該-z選項)。

引用自:https://unix.stackexchange.com/questions/690959