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