165 votes

Comment puis-je rechercher une multiligne motif dans un fichier?

J'ai besoin de trouver tous les fichiers contenant une chaîne spécifique à ce modèle. La première solution qui vient à l'esprit est l'aide à trouver les canalisations avec xargs grep:

find . -iname '*.py' | xargs grep -e 'YOUR_PATTERN'

Mais si j'ai besoin de trouver des modèles qui s'étend sur plus d'une ligne, je suis coincé à cause de la vanille grep ne pouvez pas trouver des multi-modèles.

121voto

ayaz Points 6910

Est-il une raison particulière

grep -Pzo '_name.*\n.*_description'

de ne pas atteindre le même résultat?

(edit: la version précédente de ce post uniquement utilisé "-P", mais cela ne fonctionne que sur une seule ligne)

120voto

Amit Points 789

Pourquoi ne pas vous aller pour awk:

awk '/Start pattern/,/End pattern/' filename

109voto

Oli Points 5620

J'ai donc découvert pcregrep qui signifie Perl Compatible Regular Expressions GREP.

Par exemple, vous devez trouver les fichiers d'où le '*nom de lavariable est immédiatement suivie par le" *description de lavariable:

find . -iname '*.py' | xargs pcregrep -M '_name.*\n.*_description'

Astuce: vous devez inclure le caractère de saut de ligne dans votre modèle. En fonction de votre plate-forme, il pourrait être '\n', \r', '\r\n', ...

24voto

bukzor Points 11085

grep -P utilise également libpcre, mais est beaucoup plus largement installé. Pour trouver un complet title section d'un document html, même si elle s'étend sur plusieurs lignes, vous pouvez utiliser ceci:

grep -P '(?s)<title>.*</title>' example.html

Depuis le PCRE de projet met en œuvre pour le perl standard, utilisez la documentation perl référence:

22voto

Oli Points 5620

Voici un exemple plus utile:

pcregrep -Mi "<title>(.*\n){0,5}</title>" afile.html

Il recherche le titre de la balise dans un fichier html, même si elle s'étend sur plusieurs lignes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X