여러 줄로 나누어질 수 있는 텍스트를 파일에서 검색하고 싶습니다. 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