grep 매뉴얼에서 -o(일치만)에 대해 말한 내용을 오해했습니다.

grep 매뉴얼에서 -o(일치만)에 대해 말한 내용을 오해했습니다.

grep수동 인용:

-o, --match만 해당
일치하는 줄의 일치하는(비어 있지 않은) 부분만 인쇄하며, 각 부분은 별도의 출력 줄에 표시됩니다.

matched (non-empty) parts of a matching line방법공백이 아닌 줄옳은?

고쳐 쓰다

댓글이 삭제된 경우 아래 Stephen의 답변을 참조하세요.

  • 설명: "줄의 빈 부분 일치" 대신 "줄의 빈 문자열"은 어떻습니까? – 라호르 10시간 전
  • 중요한 태그는 "일치하는 세트"라고 생각합니다. "일치하는 문자열"도 작동할 것입니다. 어느 것이 더 나은지 묻는 사람은 아닙니다. – 스티븐 지터 59분 전

답변1

이는 실제로 비어 있지 않은 줄이 아니라 일치하는 줄의 비어 있지 않은 일치 부분을 나타냅니다. 이것결과출력에는 비어 있지 않은 줄만 포함되어 있고 한 줄에 하나의 비어 있지 않은 일치 항목이 있다는 것입니다.

grep -o일치하는 항목당 한 줄을 인쇄합니다.

$ grep -Eo '.?' <<<"hello"
h
e
l
l
o

그러나 빈 일치 항목은 출력되지 않습니다. 많은 정규식은 빈 텍스트와 일치할 수 있습니다. 예를 들면 다음과 같습니다.

$ grep -E '.?' <<<""

빈 줄이 일치하므로 빈 줄을 출력합니다. 그러나 -o결과를 추가하면 전혀 출력이 생성되지 않습니다.

$ grep -Eo '.?' <<<""

-o빈 일치 항목은 무시되기 때문입니다 .

빈 일치 항목을 무시하도록 지정 -o하면 구현자가 길이가 0인 일치 항목을 처리하는 방법을 결정할 필요가 없으며, 그렇지 않으면 많은 경우 다소 장황하고 쓸모 없는 출력이 생성됩니다.

답변2

다음 두 명령을 고려하십시오.

grep -o '^' <<<'1a2b3c'

이는 줄의 시작 부분과 일치하고 비어 있기 때문에 아무것도 출력하지 않으므로 출력하지 않습니다.


grep -o '[abc]' <<<'1a2b3c'

이는 일치하는 라인의 일치하는(비어 있지 않은) 부분을 출력하며, 각 부분은 별도의 출력 라인에 있습니다.

a
b
c

관련 정보