想像する:
$ 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
-z
grep
\n
そして grep
このオプション\n
は行区切り文字として使用されません。-z