Quelle est la différence entre grep, pgrep, egrep et fgrep?

Réponses:

85

Différences entre grep, pgrep, egrep et fgrep (Linux):

grep

grep est un acronyme qui signifie "impression d'expressions régulières globales". grep est un programme qui analyse un fichier spécifié ou des fichiers ligne par ligne, en renvoyant des lignes contenant un motif. Un modèle est une expression qui spécifie un ensemble de chaînes en interprétant les caractères comme des méta-caractères. Par exemple, le méta-caractère astérisque (*) est interprété comme signifiant "zéro ou plus de l'élément précédent". Cela permet aux utilisateurs de taper une courte série de caractères et méta-caractères dans une commande grep pour que l'ordinateur nous indique les lignes dans lesquelles les fichiers correspondent.

La commande grep standard ressemble à ceci:

grep <flags> '<regular expression>' <filename>

grep affiche les résultats de la recherche à l'écran (stdout) et renvoie les valeurs de sortie suivantes:

0    A match was found.
1    No match was found.
>1   A syntax error was found or a file was inaccessible 
     (even if matches were found).

Certains indicateurs courants sont: -cpour compter le nombre de correspondances réussies et ne pas imprimer les correspondances réelles, -ipour rendre la casse de recherche insensible, -npour imprimer le numéro de ligne avant chaque impression de correspondance, -vpour prendre le complément de l'expression régulière (c'est-à-dire, renvoyer les lignes qui ne correspond pas) et -ld’imprimer les noms de fichiers avec des lignes correspondant à l’expression.

egrep

egrep est un acronyme pour "Extended Global Regular Expressions Print".

Le "E" dans egrep signifie traiter le motif comme une expression régulière. "ERE" abrégé "Extended Regular Expressions" est activé dans egrep. egrep (qui est le même que grep -E) traite +, ?, |, (, et )en tant que méta-caractères.

Dans les expressions régulières de base (avec grep), les méta-caractères ?, +, {, |, (et )perdent leur signification particulière. Si vous voulez grep pour traiter ces caractères comme méta-caractères, leur échapper \?, \+, \{, \|, \(et \).

Par exemple, ici, grep utilise des expressions rationnelles de base dans lesquelles le plus est traité littéralement, toutes les lignes contenant un plus sont renvoyées.

grep "+" myfile.txt

Par ailleurs, egrep considère le "+" comme un méta-caractère et renvoie chaque ligne car le signe plus est interprété comme "une ou plusieurs fois".

egrep "+" myfile.txt

Ici, chaque ligne est renvoyée car elle a +été traitée par egrep comme un méta-caractère. normal, grep aurait recherché uniquement les lignes avec un littéral +.

fgrep

fgrep est un acronyme qui signifie "impression d'expressions régulières globales à chaînes fixes".

fgrep (identique à grep -F) est fixe ou rapide grep et se comporte comme grep mais ne reconnaît PAS les méta-caractères d'expression régulière comme étant spéciaux. La recherche s’achèvera plus rapidement car elle ne traite qu’une simple chaîne plutôt qu’un motif complexe.

Par exemple, si je souhaitais rechercher dans mon profil .bash_profile un point littéral (.), Il serait difficile d’utiliser grep car je devrais échapper au point, car dot est un méta-caractère qui signifie "joker, tout caractère unique":

grep "." myfile.txt

La commande ci-dessus renvoie chaque ligne de myfile.txt. Faites ceci à la place:

fgrep "." myfile.txt

Alors seulement les lignes qui ont un littéral '.' en eux sont retournés. fgrep ne nous aide pas à échapper à nos méta-personnages.

pgrep

pgrep est un acronyme qui signifie "Process-ID Global Expressions Print".

pgrep examine les processus en cours et répertorie les ID de processus qui correspondent aux critères de sélection de stdout. pgrep est pratique lorsque tout ce que vous voulez savoir est l'identifiant de processus entier d'un processus. Par exemple, si je voulais seulement connaître l'ID de processus de mon processus mysql, j'utiliserais la commande pgrep mysqlqui renverrait un ID de processus comme 7312.

Eric Leschinski
la source
From pgrepmanual : le nom du processus utilisé pour la mise en correspondance est limité aux 15 caractères présents dans la sortie de / proc / pid / stat . Utilisez l'option -f pour faire correspondre la ligne de commande complète, / proc / pid / cmdline .
Pablo Un