s
19 708 Pages

en informatique grep (général rREGULIERS etXpression pRint) est un commandement systèmes Unix et Unix, et plus généralement des systèmes Posix[1] et GNU[2], que la recherche dans un ou plusieurs fichier texte les lignes qui correspondent à un ou plusieurs modèles spécifiés avec expressions régulières ou instruments à cordes littéraux et produit une liste de lignes (ou même les seuls noms de fichiers) qui a été trouvé la correspondance. Il est un type de filtre.

grep Il est couramment utilisé pour rechercher les occurrences d'un ou plusieurs mots dans une série de fichiers, souvent en liaison avec les commandes trouver et xargs par un pipeline logiciel.

grep Il peut généralement être utilisé avec fichiers binaires, par exemple, pour rechercher la présence d'étiquettes particulières exif dans les fichiers contenant photos numériques. En particulier, la version GNU de grep dans ce cas, il énumère les noms des fichiers contenant la chaîne indiquée ou une expression régulière (et non aussi la partie de texte correspondant, comme cela se passe normalement pour les fichiers texte).

L'utilisation

La syntaxe générale de grep il est:

grep [Options] [-e] motif1 [-e pattern2 ...] [-] [fichier1 [fichier2 ...]]

paramètres optionnels fichier indiquer les noms des fichiers sur lesquels la recherche. Si non spécifié, la recherche est effectuée sur les données lues à partir entrée standard. Spécification de plus d'un paramètre fichier, chaque ligne qui se trouve un match est précédé du nom du fichier qui le contient et par son numéro de ligne; dans le cas d'un seul paramètre fichier (Ou pas) est au lieu que indiqué le contenu de la ligne.

les paramètres modèle préciser les critères de recherche, et le comportement par défaut est qu'il est expressions régulières. Une ligne est si elle répond à au moins l'un des modèles.

Le double tiret -- (Facultatif) indique que les paramètres suivants ne sont pas considérées comme des options.

Parmi les principales options sont les suivantes:

-la
Ignorer la différence entre les lettres majuscules et minuscules.
-n
Précéder chaque ligne des résultats avec le numéro de ligne dans le fichier (en commençant par 1).
-l
Il indique que les noms des fichiers dans lesquels au moins un match a été trouvé (chaque fichier est répertorié une fois, quel que soit le nombre de correspondances trouvées dedans).
-v
Deny les modèles spécifiés, produisant une liste de lignes qui ne répondent pas à tous les modèles.
-et
Les modèles sont expressions régulières étendues plutôt que des expressions régulières de base.
-fa
Les modèles sont instruments à cordes qui se situent d'une manière littérale.
-c
Il ne produit que pour chaque compte du nombre de lignes qui correspondent fichier.

la version GNU de grep (Disponible par exemple sur les systèmes GNU / Linux) Prise en charge entre autres, les options suivantes:

-nombre
Chaque ligne pour laquelle une correspondance a été trouvée est inscrite à la nombre lignes spécifiées qui lui sont adjacents (pour fournir le contexte). Chaque ligne est répertorié une seule fois, de sorte que même s'il n'y a aucun résultat dans les lignes adjacentes, ils ne seront pas répétées.
-A nombre
Il a suivi chaque ligne pour laquelle une correspondance a été trouvée par nombre lignes spécifiées qui le suivent (le « A » signifie après - plus tard).
-B nombre
Avant chaque ligne de pour laquelle une correspondance a été trouvée par nombre les lignes spécifiées qui le précèdent (le « B » représente avant - avant).

variantes

Il existe également des variantes Historiquement grep appel egrep et fgrep, qui interprètent modèles respectivement les expressions régulières et que chaînes de caractères.

L'utilisation d'options -et et -fa Il est équivalent à l'utilisation de ces variantes.

Origine du nom grep

Le nom du programme est de la commande g / re / p dell 'éditeur de texte et qui effectue une fonction similaire, à savoir la recherche globalmente (à savoir tout au long du fichier et non pas dans une seule ligne) une expression régulière (rREGULIERS etXpression) Et de spectacle (pRint) Matches.

Points d'attention

Texte d'ancrage pour un look

Une expression régulière qui est dépourvue d'ancres peut trouver la correspondance en tout point de la ligne, et donc au milieu d'un mot. Cela peut être une source de résultats inattendus si ce qui était prévu était en fait une recherche de mot entier. Par exemple, l'expression régulière « 10 » trouve une correspondance aussi dans « 100 », « 101 », « 320103 » et ainsi de suite.

Solution avec GNU grep

la version GNU de grep, ainsi que les points d'ancrage au début et à la fin de la ligne, le soutien aussi spécial wildcards qui représentent le début et / ou à la fin d'un mot, et peut être utilisé pour ancre le reste de l'expression régulière. Plus précisément, la séquence \< Il correspond au point de départ d'un mot, \> au point où l'une des extrémités de mot et \ b pour marquer le début ou la fin d'un mot. Par exemple, l'expression régulière \<10\> situé en correspondance avec seulement les lignes qui contiennent des « 10 » en tant que mot en lui-même, d'une manière visuellement isolé, et non « 100 » ou « 210 ».

Solution expressions régulières POSIX

Les ancrages prévus par la norme Posix ne sont celles qui représentent le début et la fin de la ligne, respectivement, le caret ^ et le signe dollar $; dans ce cas, une solution possible est d'étendre l'expression régulière en l'entourant avec [^ [: Alnum:]], par exemple avec [^ [: Alnum:]] 10 [^ [: alnum:]]; toutefois, cela ne couvre pas les cas dans lesquels il existe une correspondance avec le début ou la fin de la ligne (où il n'y a pas de caractères qui précèdent ou les caractères suivants), et même dans le cas où l'expression à la fois la ligne entière. doit également tenir compte de ces situations développer manuellement les quatre cas, en utilisant de multiples options -et. Par exemple, la ligne de commande grep deviendrait:

grep -e "[^ [: alnum:]] 10 [^ [: alnum:]]" -e "[^ [: alnum:]] 10 $" -e "10 ^ [^ [: alnum:]]" -e "$ ^ 10" ...

Vous pouvez également utiliser les expressions régulières étendues (en option grep -et) Et joker | pour indiquer des expressions plus alternatives, par exemple:

grep -E "[^ [: alnum:]] 10 [^ [: alnum:]] | [^ [: alnum:]] $ 10 | 10 ^ [^ [: alnum:]] | ^ 10 $" ...

Les chaînes littérales ressemblent à des expressions régulières

Le comportement par défaut de grep Il prévoit que les modèles utilisés pour la recherche sont des expressions régulières et non des chaînes littérales (pour lequel vous devez spécifier l'option appropriée -fa), Mais il est facile d'oublier la distinction parce qu'il n'a pas souvent à la recherche de texte contenant la wildcards comme le point ..

Le problème est que la distinction existe réellement, et que souvent les chaînes qui contiennent des caractères génériques (par exemple un adresse IP numérique 10.10.1.1) Les expressions régulières sont aussi une bonne solution, donc grep Il indique aucune erreur, mais peut fournir des résultats complètement inattendus. Par exemple, l'expression régulière 10.1.1.1 également situé en correspondance 10.101.1 ou 1091a1b1 ou plus, et en même temps que le fait qu'elle ne soit pas ancrée, il augmente la possibilité de résultats inattendus.

Une solution possible consiste précisément d'utiliser l'option -fa donc faire de la recherche littérale; Mais ce qui empêche le texte d'ancrage (s'il vous plaît noter que la chaîne littérale 10.1.1.1 également situé en correspondance 10.1.1.100 ou 210.1.1.1).

Si cela est un problème, il faut recourir à nouveau à l'expression régulière, ce qui indique que les cartes sauvages sont à considérer dans un littéral en préfixant un par un avec la barre oblique inverse \ puis procéder comme pour le cas où vous avez besoin d'être fixé. Par exemple, la version GNU de grep:

grep -e « \<10\.1\.1\.1\>» ...

Utilisation de la barre oblique inverse

la shell textuelle systèmes Unix et Unix effectuer des substitutions sur l'ensemble de la ligne de commande avant de l'exécuter, parmi lesquels il y a aussi celle des séquences de caractères commençant par un inverse bar \ quand ils ne sont pas spécifiées dans des guillemets doubles ou simples. Par exemple, la ligne de commande

grep -e 10 \ 0,1 \ 0,1 \ 0,1

Il est transformé par la coque en

grep -e 10.1.1.1

et alors grep Il se répercuterait de fonctionner avec les recherches d'expressions régulières 10.1.1.1, qui était probablement pas leur intention initiale.

Il convient donc de spécifier des expressions régulières entre guillemets doubles ou simples guillemets, comme dans

grep -e '10 \ .1 \ .1 \ .1 '

Utiliser avec find

Pour effectuer une recherche plus fichier au sein d'une hiérarchie de annuaire Il est souvent utilisé grep en combinaison avec la commande trouver, par exemple avec:

trouver. -type f -name "* .c" exec grep -e "expression« {+}

Ce faisant, toutefois, la possibilité existe que grep Il est invoqué par trouver un seul fichier à examiner (par exemple, trouver trouvé un seul fichier), auquel cas grep procède à la liste des lignes sans prefissarle avec le nom de fichier correspondant auquel ils appartiennent (ce qui est le comportement par défaut dans le cas d'un seul fichier), fournissant ainsi un résultat différent de celui normalement prévu.

Pour vous remédier pouvez préciser directement entre les paramètres de grep le nom du premier fichier, de sorte que grep Il est toujours invoqué avec au moins deux noms de fichiers à examiner. Pour est pratique / Dev / null, qui est toujours présent et ne contient des données et est donc idéal comme un fichier « de remplissage » qui n'influence pas la recherche. Par exemple:

trouver. -type f -name "* .c" exec grep -e "expression« / Dev / null} + {

notes

  1. ^ (FR) grep, sur La base Open Group Spécifications Numéro 6 IEEE Std 1003,1 à 2008. Extrait le 26 Juin, 2009.
  2. ^ (FR) grep, des lignes d'impression en correspondance de motif, sur manuel GNU grep. Récupéré le 19 mai 2008.

D'autres projets

  • Il contribue à Wikimedia Commons Wikimedia Commons: Il contient des images ou d'autres fichiers grep

liens externes

autorités de contrôle GND: (DE7692411-7