Как искать текст в файле, игнорируя новые строки?

Я бы хотел найти текст, который можно разделить на несколько строк в файле. Grep, который игнорирует разрывы строк и возвращает соответствующий диапазон строк.

например, я бы искал is an example file и ожидал, что он будет найден в следующем файле:

Это

пример файла.

Чтобы не зависеть от ведущих или конечных пробелов, было бы лучше всего игнорировать все формы белого пространства (в идеале, обрабатывать любую последовательность белого пространства как одно пространство).


Одно неидеальное решение – tr '\n' ' ' | grep 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