Regex pour «ou» de plusieurs mots dans grep


12
[Computer]$ grep "foo|bar" filename

Je comprends que la commande ci-dessus doit retourner chaque ligne dans le nom de fichier où il y a "foo" ou "bar". Les pages de manuel le confirment | comme Regex ou symbole et le code fonctionne pour "foo" et "bar" indépendamment. Qu'est-ce que je rate?

Réponses:


21

grep utilise des expressions régulières de base (BRE) par défaut. Depuis la page de manuel:

Expressions régulières de base et étendues: dans les expressions régulières de base, les méta-caractères?, +, {, |, (Et) perdent leur signification spéciale; utilisez plutôt les versions avec barre oblique inversée \ ?, +, {, \ |, (et).

Vous devez donc soit échapper au |:

grep "foo\|bar" filename 

ou activez les expressions régulières étendues:

grep -E "foo|bar" filename

J'ai vu cela dans la page de manuel et j'ai mal compris. Je pensais que cela signifiait que \ | le ferait rechercher l'expression complète "foo | bar" par opposition aux expressions individuelles. Merci pour la réponse rapide!
Ocasta Eshu

4
Vous pouvez également utiliser egrep(un alias pour grep -E) au lieu de grep.
speakr
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.