Je voudrais une promenade à travers les différences entre grep
, pgrep
, egrep
et fgrep
et comment je les utiliser.
linux
command-line
grep
Eric Leschinski
la source
la source
Réponses:
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 affiche les résultats de la recherche à l'écran (stdout) et renvoie les valeurs de sortie suivantes:
Certains indicateurs courants sont:
-c
pour compter le nombre de correspondances réussies et ne pas imprimer les correspondances réelles,-i
pour rendre la casse de recherche insensible,-n
pour imprimer le numéro de ligne avant chaque impression de correspondance,-v
pour prendre le complément de l'expression régulière (c'est-à-dire, renvoyer les lignes qui ne correspond pas) et-l
d’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.
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".
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":
La commande ci-dessus renvoie chaque ligne de myfile.txt. Faites ceci à la place:
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 mysql
qui renverrait un ID de processus comme 7312.la source
pgrep
manual : 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 .