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