grep 명령은 -Pz를 사용할 때 '^' 및 '$' 줄 끝 앵커 시작을 지원하지 않습니다.

grep 명령은 -Pz를 사용할 때 '^' 및 '$' 줄 끝 앵커 시작을 지원하지 않습니다.

인용하다AU의 Q&A.

grep매개변수를 사용한 GNU의 동작이 변경되고 행 앵커의 시작 및 끝을 -Pz지원하지 않는 이유는 무엇입니까?^$

이것은 실수인가 아니면 올바른 행동인가?

Ubuntu 16.04에서 테스트되었으며 커널 버전은 4.4.0-21-generic입니다.

$ echo ^ | grep -Pz ^
grep: unescaped ^ or $ not supported with -Pz

답변1

이는 GNU grep 버전 2.24(2016년 3월 10일 출시) 이상에서 예상되는 동작이며 GNU grep 2.5에 도입된 버그에 대한 수정 사항입니다.

소스 코드 보기:

if (*p == '$' || (*p == '^' && !after_unescaped_left_bracket))
  die (EXIT_TROUBLE, 0,
       _("unescaped ^ or $ not supported with -Pz"));

2016년 2월 21일에 변경되었습니다.이 버그 보고서이 변경 사항에 대한 자세한 내용은 다음과 같습니다.


GNU grep 옵션이지만 GNU grep 때문에 버그입니다.PCRE_MULTILINEPCRE 정규식을 컴파일하려면 set을 사용하세요., 그리고또한 여러 레코드를 한 번에 처리하기 위해 pcre_exec 호출로 되돌아갔습니다., 이것이 문제의 근원입니다.지적한대로통과스티븐 차제라스

관련 정보