J'essaie de comprendre la différence entre grep -e
et grep -E
. Maintenant, grep manpage
j'ai eu:
-E, --extended-regexp
Interprétez PATTERN comme une expression régulière étendue (voir ci-dessous).
-e PATTERN, --regexp = PATTERN
Utilisez PATTERN comme motif; utile pour protéger les motifs commençant par -
L'explication ci-dessus n'a pas de sens pour moi.
Alors, quelqu'un peut-il m'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 simplement de lever la ambiguïté quand une expression rationnelle commence par un tiret. Donc,grep ---foo
donneunrecognized option: ---foo
mais tu peux diregrep -e ---foo
à grep pour l'expression régulière---foo
.Réponses:
-e
est strictement le drapeau pour indiquer le motif contre lequel vous voulez apparier.-E
contrôle si vous devez échapper à certains caractères spéciaux.man grep
l'explique-E
un peu plus:la source
echo "hello" | grep -o -e 'h|l'
reçois aucune sortie parce que j'ai|
perdu sa signification particulière et que lorsqueecho "hello" | grep -o -E 'h|l'
j'obtiens la sortie désirée.echo "hello" | grep -o -e 'h' -e 'l'
travaillera si vous voulez jeter le-E
loin dans ce cas.grep -e -o 'h|l'
correspondra littéralementh|l
pendant quegrep -e -o 'h\|l'
correspondrah
oul
et -E c'est le contrairegrep -e
Permet également d'utiliser plusieurs chaînes pour la recherche:'grep -e 'abc' -e 'def' -e '123'
recherchera ces trois chaînes:abc
ainsi quedef
et123
.Cela fonctionne assez similaire à
grep 'abc\|def\|123'
où\|
signifieor
mais peut ê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é sur ce sujet sur une question assez similaire: Expression rationnelle pour trouver des caractères doubles dans Bashla source
/élargi
Alors encore une fois.
la source
(
,)
,|
etc besoin d'être échappé antislash avoir leur signification particulière dans regexp de base, mais pas étendu (où ils doivent être échappé à être traité comme un littéral de chaîne)Juste pour élaborer sur l'
-e
option.-e
est souvent optionnel:est identique à
Comme indiqué dans une précédente réponse et dans les pages de manuel, il existe plusieurs modèles de recherche ou pour protéger un modèle commençant par un trait d'union (-).
la source