52 votes

Comment utiliser les regex OU grep dans Cygwin?

J'ai besoin de renvoyer les résultats pour les deux matches différents, à partir d'un seul fichier.

grep "string1" my.file

correctement retourne l'instance unique de mot1 dans mon.fichier

grep "string2" my.file

correctement retourne l'instance unique de chaîne2 dans mon.fichier

mais

grep "string1|string2" my.file

ne retourne rien

en regex tester les applications que la syntaxe est correcte, alors pourquoi n'est-il pas de travail pour grep dans cygwin ?

77voto

Xavi López Points 14801

À l'aide de l' | caractère sans prendre la fuite dans une base de l'expression régulière ne correspondent à l' | littérale. Par exemple, si vous avez un fichier avec le contenu

string1
string2
string1|string2

À l'aide de grep "string1|string2" my.file ne correspondent à la dernière ligne

$ grep "string1|string2" my.file
string1|string2

Afin d'utiliser l'alternance de l'opérateur |, vous pouvez:

  1. Utiliser une base de l'expression régulière (juste grep) et d'échapper à l' | de caractères dans l'expression régulière

    grep "string1\|string2" my.file

  2. L'utilisation prolongée d'une expression régulière avec egrep ou grep -E, comme Julien l'a déjà souligné dans sa réponse

    grep -E "string1|string2" my.file

  3. Si c'est deux modèles différents que vous le souhaitez, vous pouvez aussi spécifier séparément en -e options:

    grep -e "string1" -e "string2" my.file

Vous pouvez trouver les articles suivants de la grep référence utile:

10voto

Julian Points 1441

Vous devrez peut-être utiliser egrep ou grep -E. Le tuyau OU le symbole est une partie de "étendu" grep et ne peuvent pas être pris en charge par la base de Cygwin grep.

Aussi, vous avez probablement besoin d'échapper à la pipe.

6voto

Travis Points 61

La meilleure et la plus claire que j'ai trouvé est: grep -e REG1 -e REG2 -e REG3 _FILETOGREP_

Je n'ai jamais utiliser la pipe car elle est moins évidente et très difficile à travailler.

0voto

Andrew Schulman Points 1946

Vous pouvez trouver cette information par la lecture de la documentation: grep(1), que vous pouvez trouver en cours d'exécution 'man grep'. Il décrit la différence entre grep et egrep, et de base et les expressions régulières, ainsi que beaucoup d'autres informations utiles à propos de grep.

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