Jessaie de comprendre la différence entre grep -e et grep -E. Maintenant de grep manpage jai obtenu:

-E, –extended-regexp

Interpréter PATTERN comme une expression régulière étendue (voir ci-dessous).

-e PATTERN, –regexp = PATTERN

Utilise PATTERN comme modèle; utile pour protéger les motifs commençant par –

Lexplication ci-dessus na pas de sens pour moi.

Alors, quelquun peut-il lexpliquer à moi en utilisant examples quelle est la différence entre les deux et quand utiliser quelle option.

PS: Version: grep (GNU grep) 2.10

Commentaires

  • Voir aussi: unix.stackexchange.com/questions/17949/…
  • Le but de -e est simplement de lever lambiguïté quand une expression régulière commence par un tiret. Donc grep ---foo donne unrecognized option: ---foo mais vous pouvez dire grep -e ---foo à grep pour lexpression régulière ---foo.

Réponse

-e est strictement le drapeau pour indiquer le modèle avec lequel vous voulez faire correspondre. -E détermine 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. 

Commentaires

  • donc cest la raison pour laquelle Je fais echo "hello" | grep -o -e 'h|l' Je nobtiens aucune sortie parce que | a perdu sa signification particulière et quand je le fais echo "hello" | grep -o -E 'h|l' Jobtiens le résultat souhaité.
  • Oui. echo "hello" | grep -o -e 'h' -e 'l' fonctionnera si vous souhaitez jeter le -E dans ce cas.
  • grep -e -o 'h|l' correspondra littéralement à h|l tandis que grep -e -o 'h\|l' correspondra à h ou l et avec -E it ' est le contraire
  • @ronnie it ' est malheureux que vous ayez besoin de plus de 200 points de réputation pour que " fonctionnalité " vous suive entre les sites SE …

Réponse

Aussi grep -e permet dutiliser plusieurs chaînes pour la recherche: "grep -e "abc" -e "def" -e "123" recherchera lune des trois chaînes suivantes: abc ainsi que def et 123.

Cela fonctionne assez similaire à grep "abc\|def\|123"\| est pour or mais c Je serais 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 jai résumé sur ce sujet sur une question assez similaire: Expression régulière pour rechercher des caractères doubles dans Bash

Réponse

voir ci-dessous

/ extended

grep comprend trois versions différentes de la syntaxe des expressions régulières: «basique», «étendue» et «perl». Dans GNU grep, il ny a aucune différence dans les fonctionnalités disponibles entre les syntaxes de base et étendues. Dans dautres implémentations, les expressions régulières de base sont moins puissantes. La description suivante sapplique aux expressions régulières étendues; les différences pour les expressions régulières de base sont résumées par la suite. 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.

Donc , encore une fois.

Dans GNU grep, il ny a aucune différence de fonctionnalité disponible entre les syntaxes de base et étendues

Commentaires

  • la fonctionnalité est la même entre de base et étendue mais la syntaxe est légèrement différente. Les caractères spéciaux de regexp comme (, ), | etc. ont leur signification particulière dans les expressions régulières de base, mais pas dans les expressions étendues (où elles doivent être échappées pour être traitées comme une chaîne littérale)

Réponse

Juste pour élaborer sur loption -e. -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 (-).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *