grep -z:\ 0が結果を生成しないのはなぜですか?

grep -z:\ 0が結果を生成しないのはなぜですか?

想像する:

$ 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'結果が生成されないのですか?

答え1

grep処理行はデフォルトで区切りであり、\nこの-zオプションは行区切り文字grepとして使用する必要があることを示します。\0

-z 説明する提供されるデータはgrep入力されるデータを変更しませんgrep\0実際には区切り文字として機能するデータと共に使用できます。例えば出力find -print0

入力データにが含まれていても、次のオプションは使用\0できません。行内で一致が見つかった場合、行区切り文字と一致しません。あなたのパターンが機能する理由は、あなたの入力に次のものが含まれているからです。grep\0-zgrep\nそして grepこのオプション\nは行区切り文字として使用されません。-z

関連情報