设想:
$ 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
选项)。