web-dev-qa-db-fra.com

Différence entre egrep et grep

J'ai une question sur grep et egrep dans unix.

Comme j'étudie récemment le Shell commands dans unix, je veux savoir quelles sont les différences entre grep et egrep.

Je trouve que nous pouvons utiliser grep et egrep avec une expression régulière. Cependant, j'ai trouvé quelque chose de différent entre ces deux commandes:

Pour ^, grep et egrep ont la même signification, c'est-à-dire que les lignes contiennent les éléments donnés au tout début.

Cependant, pour |, grep, sans barre oblique devant |, signifie le caractère de |, et si je mets une barre oblique devant, elle s'allume, ce qui signifie que la ligne contient soit le contenu devant ou derrière. MAIS, pour egrep, c'est le contraire. | a les dernières significations de grep et \| a l'ancienne signification de grep lors de son utilisation.

Quelqu'un d'autre pourrait-il bien vouloir expliquer pourquoi?

44
David Dai

Oui je peux.

La commande egrep est un raccourci pour grep binaire, mais à une exception près, lorsque grep est invoquée en tant que egrep le binaire grep active son la logique interne car elle serait appelée grep -E.

La différence est que l'option -E Permet d'utiliser des modèles d'expression régulière étendus. Il vous permettra d'utiliser des méta-symboles tels que +, ? Ou |. Ce ne sont pas des caractères ordinaux comme nous en avions dans les mots ou les noms de fichiers, mais des commandes de contrôle pour grep binaire lui-même. Ainsi, | Signifie OU logique.

Ainsi, par exemple, vous voulez lister les fichiers dans le répertoire et ne voir que ceux qui contiennent des extensions "mp4" ou "avi". Avec egrep vous ferez:

ls | egrep "mp4|avi"

Dans cet exemple, | Agit comme OR commande, il récupérera pour sortir de ls tous les noms qui contiennent des chaînes "mp4" ou "avi". Si vous exécutez-le avec la commande plain grep vous n'obtiendrez rien, car grep ne connaît pas la commande | et il recherchera la chaîne de texte entière "mp4 | avi" (avec le symbole pipe). Par exemple, si vous avez un fichier |MPG|cool-guy.q2.stats dans votre répertoire, vous l'obtiendrez avec une simple grep recherche avec des pipes.

C'est pourquoi vous devez échapper | Dans votre commande egrep pour obtenir le même effet que dans grep. L'échappement masquera la signification spéciale de la commande | Pour le binaire grep.

68
rook

la commande grep est utilisée pour trouver les lignes ayant requis patran dans un fichier, nous avons des méta-caractères séparés en plaçant '\'

egrep est égal à grep -E, qui est une expression régulière étendue utilise {,}, (,), | ,? en tant que méta-caractères sans donner '\' dans l'expression

fgrep est utilisé pour trouver la chaîne fixe, qui est égale à grep -F

test.txt
fichier
tuile
(f | t) ile
(\ f\|\t) ile

grep "(f | t) ile" test.txt
(f | t) ile

grep "(\ f\|\t) ile" test.txt
fichier
tuile

egrep "(f | t) ile" test.txt
fichier
tuile

egrep "(\ f\|\t) ile" test.txt
(f | t) ile

fgrep "(f | t) ile" test.txt
(f | t) ile

fgrep "(\ f\|\t) ile" test.txt
(\ f\|\t) ile

0
vinay manyam