개행 문자를 무시하고 파일에서 텍스트를 검색하는 방법은 무엇입니까?

개행 문자를 무시하고 파일에서 텍스트를 검색하는 방법은 무엇입니까?

여러 줄로 나누어질 수 있는 텍스트를 파일에서 검색하고 싶습니다. grep은 줄바꿈을 무시하고 일치하는 줄 범위를 반환합니다.

예를 들어, is an example file다음 파일에서 검색하고 찾을 것으로 예상합니다.


샘플 파일 입니다
.

선행 또는 후행 공백에 의존하지 않고 모든 형태의 공백을 완전히 무시하는 것이 가장 좋습니다(이상적으로는 일련의 공백을 단일 공백으로 처리하는 것이 좋습니다).


tr '\n' ' ' | grep일치와 불일치를 구별하지만 일치 항목을 표시하지 않고 대용량 파일을 잘 처리하지 못하는 비이상적 솔루션입니다 .

답변1

GNU는 grep그것을 할 수 있다

grep -z 'is\san\sexample\sfile.' file

주석에서 제기된 일부 사항을 충족하기 위해 스크립트가 일부 수정되었습니다.

 grep -oz '^[^\n]*\bis\s*an\s*example\s*file\.[^\n]*' file

대용량 파일의 경우 메모리 제한은 상상도 못하지만, 문제가 발생하면 부담 없이 사용해도 됩니다.sed

sed '/\bis\b/{
          :1
          N
          /file\.\|\(\n.*\)\{3\}/!b1
         }
     /\<is\s*an\s*example\s*file\./p
     D' file

패턴에 4개의 단어가 있으므로 메모리에 4줄 이상을 유지하지 마십시오( \(\n.*\)\{3\}).

답변2

이 시도:

pcregrep -M '\bThis\s+is\b' <<EOT
This
is
an example
file.
EOT

관련 정보