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

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

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

Это

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

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


Одно неидеальное решение – tr '\n' ' ' | grep tr '\n' ' ' | grep , который различает совпадения и не совпадения, но не показывает совпадения и не имеет большого отношения к большим файлам.

  • Как найти пакет Fedora, обеспечивающий необходимую мне зависимость?
  • Распечатывать список файлов меньше указанного размера файла
  • инструмент в терминале, например, шлем-шлейф / шлем для терминала?
  • Может ли grep использоваться для поиска файлов с некоторой строкой в ​​их именах?
  • Есть ли программа поиска / порт поиска контента (* not * index based), которая эффективна для файлов, требующих фильтров для извлечения текста
  • Есть ли html-поиск / поисковик документов, например, служебная информация для информационных файлов?
  • Поиск строки в файлах в текущем каталоге, опустить дубликаты
  • grep, как подавить отображение несогласованного файла?
  • 2 Solutions collect form web for “Как искать текст в файле, игнорируя новые строки?”

    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 
    Linux и Unix - лучшая ОС в мире.