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