J'essaie de comprendre la différence entre grep -e
et grep -E
. Maintenant de grep manpage
J'ai eu:
-E, --extended-regexp
Interprétez PATTERN comme une expression régulière étendue (voir ci-dessous).
-e MOTIF, --regexp = MOTIF
Utilisez le MOTIF comme motif; utile pour protéger les modèles commençant par -
L'explication ci-dessus n'a pas de sens pour moi.
Alors, quelqu'un peut-il me l'expliquer en utilisant examples
quelle est la différence entre les deux et quand utiliser quelle option.
PS: Version: grep (GNU grep) 2.10
-e
est strictement le drapeau pour indiquer le motif auquel vous souhaitez faire correspondre. -E
contrôle si vous devez échapper certains caractères spéciaux.
man grep
explique -E
un peu plus:
Basic vs Extended Regular Expressions
In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \).
Traditional egrep did not support the { meta-character, and some egrep implementations support \{ instead, so portable scripts should avoid { in grep -E patterns and should use [{] to match a
literal {.
GNU grep -E attempts to support traditional usage by assuming that { is not special if it would be the start of an invalid interval specification. For example, the command grep -E '{1' searches for
the two-character string {1 instead of reporting a syntax error in the regular expression. POSIX.2 allows this behavior as an extension, but portable scripts should avoid it.
Aussi grep -e
permet d'utiliser plusieurs chaînes de recherche: 'grep -e 'abc' -e 'def' -e '123'
recherchera ces trois chaînes: abc
ainsi que def
et 123
.
Cela fonctionne assez similaire à grep 'abc\|def\|123'
où \|
signifie or
mais pourrait être un peu plus clair à lire.
Comme les faits les plus importants sur grep -E
sont déjà expliqués ici, je veux juste ajouter ce que j'ai résumé à ce sujet sur une question assez similaire: Expression régulière pour trouver des caractères doubles dans Bash
voir ci-dessous
/élargi
grep comprend trois versions différentes de la syntaxe des expressions régulières: "de base", "étendu" et "Perl". Dans GNU grep, il n'y a aucune différence dans les fonctionnalités disponibles entre les syntaxes de base et étendues. Dans d'autres implémentations, les expressions régulières de base sont moins puissantes. La description suivante s'applique aux expressions régulières étendues; différences pour les bases régulières Les expressions régulières Perl offrent des fonctionnalités supplémentaires et sont documentées dans pcresyntax (3) et pcrepattern (3), mais peuvent ne pas être disponibles sur tous les systèmes.
Alors, encore une fois.
Dans GNU grep, il n'y a aucune différence dans les fonctionnalités disponibles entre les syntaxes de base et étendues
Juste pour élaborer sur le -e
option. -e
est souvent facultatif:
grep PATTERN
est identique à
grep -e PATTERN
sauf si, comme indiqué dans une réponse précédente et dans les pages de manuel, il existe plusieurs modèles de recherche, ou pour protéger un modèle commençant par un tiret (-).