commande grep

Objectif

Recherche un modèle dans un fichier.

Syntaxe

grep [ -E | -F ] [ -i ] [ -h ] [ -H ] [ -L ] [ -r | -R ] [ -s ][ -u ] [ -v ] [ -w ] 
[ -x ] [ -y ] [ [ [ -b ] [ -n ] ] | [ -c | -l | -q ] ] [ -p [ Separator ] ] { [ -e PatternList ... ] [ -f PatternFile ... ] | PatternList ... } 
[ -U [ -I ] unicode_hex_notation_pattern ] [ File ... ]

Descriptif

La commande grep recherche le modèle spécifié par le paramètre Modèle et écrit chaque ligne correspondante dans la sortie standard. Les modèles sont des expressions régulières limitées dans le style de la commande ed ou egrep . La commande grep utilise un algorithme non déterministe compact.

La commande grep affiche le nom du fichier contenant la ligne correspondante si vous spécifiez plusieurs noms dans le paramètre Fichier . Les caractères ayant une signification particulière pour l'interpréteur de commandes ($, " *, " [, " |, " ^, " (, " ), " \") doivent être placés entre guillemets lorsqu'ils apparaissent dans le paramètre Pattern. Lorsque le paramètre Pattern n'est pas une simple chaîne de caractères, vous devez placer l'ensemble du motif entre guillemets simples. Dans une expression telle que [ a-z ], le signe-(moins) cml spécifie une plage, en fonction de la séquence de classement en cours. Une séquence de classement peut définir des classes d'équivalence à utiliser dans des plages de caractères. Si aucun fichier n'est spécifié, " grep suppose une entrée standard.

Remarque :
  1. N'exécutez pas la commande grep sur un fichier spécial car elle génère des résultats imprévisibles. Les lignes d'entrée ne doivent pas contenir le caractère NULL.
  2. Les fichiers d'entrée doivent se terminer par un caractère de retour à la ligne.
  3. Le caractère de retour à la ligne ne correspond pas aux expressions régulières.
  4. Bien que certains indicateurs puissent être spécifiés simultanément, certains indicateurs remplacent les autres. Par exemple, l'option -l est prioritaire sur tous les autres indicateurs. Et si vous spécifiez à la fois les indicateurs -E et -F , le dernier spécifié est prioritaire.

Indicateurs

Tableau 1. Indicateurs
Article Descriptif
-b Pose chaque ligne par le numéro de bloc sur lequel elle a été trouvée. Utilisez cet indicateur pour rechercher les numéros de bloc de disque par contexte. L'indicateur " -b ne peut pas être utilisé avec une entrée " stdin ou des tuyaux.
-c Affiche uniquement le nombre de lignes correspondantes.
-E Traite chaque modèle spécifié en tant qu'expression régulière étendue (ERE). Une valeur NULL pour l'ERE correspond à chaque ligne.
Remarque: La commande grep avec l'indicateur -E est identique à la commande egrep , sauf que les messages d'erreur et d'utilisation sont différents et que l'indicateur -s fonctionne différemment.
-e PatternList Indique un ou plusieurs modèles de recherche. Cette option fonctionne comme une simple recherche de motif, mais elle est utile lorsque le motif commence par un - (moins). Les modèles doivent être séparés par un caractère de nouvelle ligne. Un modèle NULL peut être spécifié par deux nouveaux caractères de ligne adjacents ou par un guillemet suivi d'un caractère de nouvelle ligne (" \n). Chaque modèle est traité comme une expression régulière de base (BRE) sauf si l'indicateur -E ou -F est également spécifié. Plusieurs indicateurs -e et -f sont acceptés par grep. Tous les motifs spécifiés sont utilisés lors de la recherche de lignes, mais l'ordre d'évaluation n'est pas spécifié.
-F Traite chaque modèle spécifié comme une chaîne au lieu d'une expression régulière. Une chaîne NULL correspond à chaque ligne.
Remarque: La commande grep avec l'indicateur -F est identique à la commande fgrep , sauf que les messages d'erreur et d'utilisation sont différents et que l'indicateur -s fonctionne différemment.
-f PatternFile Indique un fichier contenant des modèles de recherche. Chaque modèle doit être séparé par un caractère de nouvelle ligne et une ligne vide est considérée comme un modèle NULL. Chaque modèle est traité comme une expression régulière de base (BRE), sauf si l'indicateur -E ou -F est également spécifié.
-h Empêche le nom du fichier contenant la ligne correspondante d'être ajouté à cette ligne. Supprime les noms de fichier lorsque plusieurs fichiers sont spécifiés.
-H Si l'option '-r ou '-R est spécifiée et qu'un lien symbolique renvoyant à un fichier d'un répertoire de type est spécifié sur la ligne de commande, la commande 'grep recherche les fichiers du répertoire référencé par le lien symbolique et tous les fichiers de la hiérarchie de fichiers qui le suivent.
-i Ignore le cas (en majuscules ou en minuscules) des lettres lors de la comparaison.
-I Spécifie que la recherche est basée sur une correspondance approximative du modèle de notation hexadécimale Unicode spécifié. La plupart des moteurs d'expressions régulières proposent une correspondance insensible à la casse comme seule correspondance possible. Si le moteur d'expression propose une correspondance insensible à la casse comme seule correspondance libre, il doit alors tenir compte de la large gamme de caractères Unicode minuscules en dehors des caractères ASCII.
Note : L'indicateur " -I ne peut être utilisé qu'avec l'indicateur " -U
-l Liste uniquement les noms des fichiers (une seule fois) qui contiennent les lignes correspondantes. Chaque nom de fichier est séparé par un caractère de nouvelle ligne. Si une entrée standard est recherchée, le nom de chemin StandardInput est renvoyé. L'indicateur " -l avec toute combinaison des indicateurs " -c et " -n se comporte comme l'indicateur " -l " uniquement.
-L Si l'option '-r ou '-R est spécifiée et qu'un lien symbolique renvoyant à un fichier de type répertoire est spécifié sur la ligne de commande ou rencontré lors de la traversée d'une hiérarchie de fichiers, la commande 'grep recherche les fichiers du répertoire référencé par le lien symbolique et tous les fichiers de la hiérarchie de fichiers qui le suivent. Si les deux paramètres -H et -L sont spécifiés, la dernière option spécifiée sur la ligne de commande prend effet.
-n Pose chaque ligne avec le numéro de ligne relatif dans le fichier. Chaque fichier commence à la ligne 1 et le compteur de ligne est réinitialisé pour chaque fichier traité.
-p[Séparateur] Affiche le paragraphe entier qui contient les lignes correspondantes. Les paragraphes sont délimités par des séparateurs de paragraphe, comme spécifié par le paramètre Séparateur , qui sont des modèles sous la même forme que le modèle de recherche. Les lignes contenant les séparateurs de paragraphe ne sont utilisées que comme séparateurs ; elles ne sont jamais incluses dans la sortie. Le séparateur de paragraphe par défaut est une ligne vide.
-q Supprime toutes les écritures dans la sortie standard, sans tenir compte des lignes correspondantes. Exits avec un statut zéro si une ligne d'entrée est sélectionnée. L'indicateur -q avec n'importe quelle combinaison des indicateurs -c, -let -n se comporte comme l'indicateur -q uniquement.
-r Recherche les répertoires de manière récursive. Par défaut, les liens vers les répertoires sont suivis.
-R Recherche les répertoires de manière récursive. Par défaut, les liens vers les répertoires ne sont pas suivis.
-s Supprime les messages d'erreur qui sont généralement écrits pour des fichiers inexistants ou illisibles. Les autres messages d'erreur ne sont pas supprimés.
-u L'indicateur '-u fait que la sortie n'est pas mise en mémoire tampon.
-U modèle_de_notation_hexadécimale_unicode Le -U drapeau active le drapeau Unicode. Le rédacteur de l'expression régulière peut ne pas utiliser un jeu de caractères Unicode pour spécifier le motif à rechercher. En outre, il n'est pas toujours possible de saisir au clavier les points de code définis par Unicode pour chaque caractère des principales langues écrites. Par conséquent, la valeur du modèle unicode_hex_notation_pattern doit être la représentation hexadécimale du point de code défini par Unicode d'un caractère. Par exemple, pour représenter le 𝄞 caractère dont le point de code défini par Unicode est U+1D11E, la valeur de unicode_hex_notation_pattern peut être la représentation hexadécimale sous la forme \U0001D11E, \x{1D11E}, ou \u{1D11E}.
Remarque :
  • La fonction de la commande " grep avec l'indicateur " -U est la même que la fonction de la commande " ugrep.
  • L'indicateur " -U ne fonctionne pas avec les anciens indicateurs de la commande " grep
-v Affiche toutes les lignes qui ne correspondent pas au modèle spécifié.
-w Recherche un mot.
-x Affiche les lignes qui correspondent exactement au modèle spécifié et ne comportant pas de caractères supplémentaires.
-y Ignore le cas des lettres lors de la comparaison.
PatternList Indique un ou plusieurs modèles à utiliser pendant la recherche. Les motifs sont traités comme s'ils étaient spécifiés à l'aide de l'indicateur " -e
Fichier Indique le nom d'un fichier à rechercher pour les canevas. Si aucune variable Fichier n'est donnée, l'entrée standard est utilisée.

Statut de sortie

Cette commande renvoie les valeurs de sortie suivantes :

Tableau 2. état de sortie
Article Descriptif
0 % Une correspondance a été trouvée.
1 seul Aucune correspondance n'a été trouvée.
>1 Une erreur de syntaxe a été détectée ou un fichier est inaccessible (même si des correspondances ont été trouvées).

Exemples

  1. Pour utiliser un modèle qui contient certains des caractères de correspondance " *, ^, ?, [, ], \(, \), \{, et " \}, entrez la commande suivante :
    grep  "^[a-zA-Z]"  pgm.s 
    Ceci affiche toutes les lignes du fichier 'pgm.s dont le premier caractère est une lettre.
  2. Pour afficher toutes les lignes qui ne correspondent pas à un modèle, entrez la commande suivante:
    grep   -v  "^#" pgm.s
    Ceci affiche toutes les lignes du fichier 'pgm.s dont le premier caractère n'est pas un '# (signe dièse).
  3. Pour afficher toutes les lignes du fichier file1 qui correspondent à la chaîne abc ou xyz , entrez la commande suivante:
    grep -E "abc|xyz"  file1
  4. Pour rechercher un " $ (signe du dollar) dans le fichier " test2, entrez la commande suivante :
    grep \\$ test2
    Les caractères \\ (double barre oblique inversée) sont nécessaires pour forcer le shell à transmettre une \$ (barre oblique inversée simple, symbole du dollar) à la commande grep . Le caractère \ (barre oblique inversée unique) indique à la commande grep de traiter le caractère suivant (dans cet exemple, $) comme un caractère littéral plutôt que comme un caractère d'expression. Utilisez la commande fgrep pour éviter d'utiliser des caractères d'échappement tels que la barre oblique inversée.
  5. Pour effectuer une recherche récursive dans /tmp afin de trouver les fichiers dont le mot IBM est sans récursivité via des liens qui pointent vers des répertoires, entrez la commande suivante:
    grep –R IBM /tmp

    Ou

    grep –r -H IBM /tmp
  6. Pour effectuer une recherche récursive dans " /tmp afin de trouver les fichiers contenant le mot " IBM, ainsi qu'une recherche récursive dans les liens, entrez la commande suivante :
    grep –r IBM /tmp

    Ou

    grep -R -L IBM /tmp
  7. Pour rechercher dans le regex_test.txt fichier le caractère dont le point de code défini par Unicode est U+6211 et la représentation hexadécimale est \u6211, entrez la commande suivante :
    grep -U "\u6211" regex_test.txt
    Pour rechercher plusieurs caractères, vous pouvez ajouter une liste de représentations hexadécimales des points de code définis par Unicode, sans espace. Par exemple, pour rechercher les caractères " et " dans le fichier " regex_test.txt, entrez la commande suivante :
    grep -U “\u0918\u0930" regex_test.txt
  8. Pour spécifier une plage de caractères entre les points de code " U+6200 et " U+6300 à rechercher dans le fichier " regex_test.txt ", entrez la commande suivante :
    grep -U "[\u6200-\u6300]" regex_test.txt
    Pour spécifier une plage de caractères entre les points de code " U+6200 et " U+6300 qui sont également en majuscules et qui doivent être recherchés dans le fichier " regex_test.txt, entrez la commande suivante :
    grep -U "[\u0000-\U0010FFFF--\p{Lu}]" regex_test.txt
  9. Pour effectuer une recherche approximative du caractère 𐐥dont le point de code défini par Unicode est U+10425 et la représentation hexadécimale est \U00010425, entrez la commande suivante :
    grep -U -I "\U00010425" regex_test.txt
  10. Pour rechercher dans le regex_test.txt fichier un nombre comportant des décimales, entrez la commande suivante :
    grep -U "\p{Nd}" regex_test.txt
    Nd est une propriété de caractère Unicode pour les nombres à chiffres décimaux.
  11. Pour rechercher les caractères hiragana en japonais dans le regex_test.txt fichier, entrez le code suivant :
    grep -U "\p{Hiragana}" regex_test.txt

Fichiers

Tableau 3. fichiers
Article Descriptif
/usr/bin/grep Contient la commande grep .