줄 바꿈을 무시하고 파일에서 텍스트를 검색하는 방법은 무엇입니까? 의존하지 말고 모든 형태의

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

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

이다
예제 파일.

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


하나의 비 이상적인 해결책은 tr '\n' ' ' | grep일치하는 것과 일치하지 않는 것을 구별하지만 일치를 표시하지 않거나 큰 파일을 잘 처리하지 않는 것입니다.



답변

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\}).


답변

이 시도:

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