301 votes

Utiliser grep pour correspondre à plusieurs chaînes

J'essaie d'utiliser grep pour faire correspondre deux chaînes différentes. Je fais ça

 grep 'string1\|string2' filename
 

Mais ce sont des lignes de correspondance qui contiennent string1 OU string2.

Comment faire correspondre les lignes contenant les deux chaînes?

267voto

dheerosaur Points 4143

Vous pouvez utiliser grep 'string1' filename | grep 'string2'

Ou, grep 'string1.*string2\|string2.*string1' filename

223voto

user45949 Points 399

Je pense que c'est ce que vous cherchiez:

 grep -E "string1|string2" filename
 

Je pense que cela répond comme ceci:

 grep 'string1.*string2\|string2.*string1' filename
 

ne correspond que dans le cas où les deux sont présents, pas l'un ou l'autre ou les deux.

32voto

Kinjal Dixit Points 2996

Pour rechercher les fichiers contenant tous les mots dans n'importe quel ordre, n'importe où:

grep -ril \'action\' | xargs grep -il \'model\' | xargs grep -il \'view_type\'

La première grep débute une recherche récursive (r), ignorant la casse (i) et d'inscription (à imprimer) le nom des fichiers de correspondance (l) pour un terme ('action' avec les guillemets simples) n'importe où dans le fichier.

Le subséquente grep recherche pour les autres termes, en conservant le respect de la casse et liste les fichiers correspondants.

La liste définitive des fichiers que vous obtiendrez seront ceux qui contiennent ces termes, dans n'importe quel ordre, n'importe où dans le fichier.

26voto

tchrist Points 47116

Si vous avez un grep avec une option -P regex perl limité, vous pouvez utiliser

 grep -P '(?=.*string1)(?=.*string2)'
 

qui a l'avantage de travailler avec des chaînes qui se chevauchent. C'est un peu plus simple d'utiliser perl comme grep , car vous pouvez spécifier la logique et plus directement:

 perl -ne 'print if /string1/ && /string2/'
 

14voto

Leo Points 801

Votre méthode était presque bonne, il ne manque que le -w

 grep -w 'string1\|string2' filename
 

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