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选项)。

相关内容