Cenário:
$ 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
Portanto, se o grep "trata a entrada como um conjunto de linhas, cada uma terminada por um byte zero", por que 'xxx\0yyy'
não produz resultados?
grep
linhas de processos; por padrão, eles são separados por\n
, e a-z
opção informagrep
que deve ser usado\0
como separador de linha.-z
descreve os dados fornecidos agrep
; ele não altera os dados que estão sendo alimentados paragrep
. Você o usaria com dados realmente usando\0
como separador, por exemplo , a saída defind -print0
.Mesmo que seus dados de entrada contivessem
\0
, você não seria capaz de fazer issogrep
com\0
a-z
opção:grep
procura correspondências dentro das linhas, portanto, não pode corresponder ao separador de linha. Seu\n
padrão funciona porque sua entrada contém isso egrep
não está usando\n
como separador de linha (por causa da-z
opção).