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?
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
.
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