상상하다:
$ 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이 "입력을 각각 0바이트로 끝나는 일련의 행으로 처리"한다면 왜 'xxx\0yyy'
결과가 생성되지 않습니까?
답변1
grep
처리 라인은 기본적으로 로 구분되며 \n
이 -z
옵션은 라인 구분 기호 grep
로 사용되어야 함을 나타냅니다.\0
-z
설명하다제공되는 데이터는 grep
입력되는 데이터를 변경하지 않습니다 grep
. \0
실제로 구분 기호 역할을 하는 데이터와 함께 사용할 수 있습니다 .예를 들어출력 find -print0
.
입력 데이터에 가 포함되어 있어도 다음 옵션을 사용할 \0
수 없습니다 . 행 내에서 일치 항목을 찾으면 행 구분 기호와 일치하지 않습니다. 귀하의 패턴이 작동하는 이유는 귀하의 입력에 다음이 포함되어 있기 때문입니다.grep
\0
-z
grep
\n
그리고 grep
이 옵션 \n
으로 인해 줄 구분 기호로 사용되지 않습니다 .-z