Comment searchr du text dans un file en ignorant les returns?

Je voudrais searchr du text qui peut être divisé sur plusieurs lignes dans un file. Un grep qui ignore les sauts de ligne et renvoie la plage de correspondance correspondante.

Par exemple, je voudrais searchr is an example file et espérer qu'il se trouve dans le file suivant:

C'est
un
file d'exemple.

Ne pas dépendre des espaces avant ou arrière, ignorer complètement toutes les forms d'espace blanc pourrait être le meilleur (idéalement, traiter toute séquence d'espace blanc comme un seul espace).


Une solution non idéale est tr '\n' ' ' | grep tr '\n' ' ' | grep , qui discrimine les correspondances et les non-correspondances, mais ne montre pas la correspondance, ni ne traite bien des gros files.

Le grep GNU peut le faire

 grep -z 'is\san\sexample\sfile.' file 

Pour remplir certains points qui se posent dans les commentaires, il y a quelques modifications au script:

  grep -oz '^[^\n]*\bis\s*an\s*example\s*file\.[^\n]*' file 

En ce qui concerne les files énormes, je n'ai pas l'imagination de la limitation de la memory, mais en cas de problème, vous êtes libre d'utiliser sed

 sed '/\bis\b/{ :1 N /file\.\|\(\n.*\)\{3\}/!b1 } /\<is\s*an\s*example\s*file\./p D' file 

qui ne gardent pas plus de 4 lignes (parce que 4 mots dans le motif) dans la memory ( \(\n.*\)\{3\} ).

Essaye ça:

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