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