Présentation
Le grep
commande (abréviation de G R global E régulier xpressions P rint) est un puissant outil de traitement de texte pour rechercher dans les fichiers et les répertoires.
Lorsque grep
est combiné avec regex (reg ular ex pressions), la recherche avancée et le filtrage des sorties deviennent simples. Les administrateurs système, les développeurs et les utilisateurs réguliers bénéficient de la maîtrise des regex avec le grep
commande.
Ce guide vous apprend à grep
avec regex à travers des exemples.
Prérequis
- Accès au terminal/ligne de commande.
- Un fichier texte dans lequel effectuer une recherche. Les exemples utilisent le .bashrc fichier.
- Utilisation de base de la commande grep.
Expression régulière grep
La syntaxe du grep
La commande inclut des expressions régulières au format suivant :
grep [regex] [file]
Les expressions régulières sont des instructions simples qui aident à filtrer les données et les fichiers. De nombreuses commandes Linux, telles que la commande awk ou la commande sed, utilisent également des expressions régulières pour rechercher et manipuler des informations.
Deux types de caractères généraux constituent une instruction regex :
- Littéraux , qui sont des caractères de texte standard.
- Spécial caractères ou métacaractères ont une signification spéciale à moins d'être échappés avec une barre oblique inverse (
\
).
Le grep
La commande offre trois options de syntaxe regex :
1. Expression régulière de base (BRE )
2. Expressions régulières étendues (ERE )
3. Expressions régulières compatibles Pearl (PCRE )
Par défaut, grep
utilise le BRE syntaxe.
Exemple d'expression régulière Grep
Exécutez la commande suivante pour tester le fonctionnement de grep regex :
grep if .bashrc
L'expression régulière recherche la chaîne de caractères. Le résultat montre toutes les instances où la lettre i
apparaît suivi d'un f
dans le .bashrc dossier. Par conséquent, la sortie met en évidence les résultats suivants :
- si
- elsi
- passi y
- identifiersi ying
La commande renvoie uniquement les lignes où il y a une correspondance.
Comment utiliser Regex avec Grep
Regex offre de nombreuses possibilités pour affiner les recherches avec grep
. Vous trouverez ci-dessous quelques exemples courants expliquant la syntaxe et la logique de base. Combinez les correspondances pour créer des instructions regex complexes.
Correspondances littérales
Les correspondances littérales effectuent une correspondance exacte pour la chaîne de caractères spécifiée. L'exemple d'expression précédent pour if
montre une correspondance littérale.
La recherche est sensible à la casse. La commande suivante renvoie des résultats différents de l'exemple précédent :
grep If .bashrc
Pour rechercher plusieurs mots, ajoutez des guillemets :
grep "if the" .bashrc
Omettre les guillemets traite le deuxième mot comme un fichier ou un emplacement.
Correspondances d'ancrage
Les correspondances d'ancrage spécifient l'emplacement de la ligne dans la recherche. Il existe deux types d'ancre :
- Le signe caret (
^
) recherche les lignes de correspondance commençant par l'expression fournie. - Le signe dollar (
$
) recherche les lignes de correspondance se terminant par le littéral fourni.
Par exemple, pour faire correspondre les lignes commençant par le mot alias
dans le .bashrc fichier, utilisez :
grep ^alias .bashrc
La recherche n'affiche pas les lignes avec des tabulations ou des espaces avant le mot.
Pour faire correspondre les lignes se terminant par le mot then
dans le .bashrc fichier, exécutez :
grep then$ .bashrc
Utilisez les deux ancres pour créer une instruction regex qui recherche un seul mot ou une seule instruction dans une ligne :
grep ^esac$ .bashrc
Utilisez uniquement des ancres pour rechercher des lignes vides dans un fichier. Ajoutez le -n
option pour afficher les numéros de ligne dans la sortie :
grep -n ^$ .bashrc
Sans le -n
option, la sortie est vide.
Correspondre à n'importe quel caractère
Le point (.
) le métacaractère regex correspond à n'importe quel caractère à la place du signe. Par exemple :
grep r.o .bashrc
La sortie affiche toutes les instances de la lettre r
, suivi de n'importe quel caractère, suivi de o
. Le point peut être n'importe quel caractère, tel qu'une lettre, un chiffre, un signe ou un espace.
Ajoutez plusieurs points pour indiquer plusieurs espaces réservés :
grep r..t .bashrc
Combinez avec la correspondance d'ancre pour créer une instruction regex complexe. Par exemple :
grep ..t$ .bashrc
L'instruction trouve toutes les lignes avec deux caractères quelconques suivis de la lettre t
à la fin.
Expressions entre parenthèses
Les expressions entre parenthèses permettent de faire correspondre plusieurs caractères ou une plage de caractères à une position. Par exemple, pour faire correspondre toutes les lignes qui contiennent and
ou end
dans le .bashrc fichier, utilisez le modèle suivant :
grep [ae]nd .bashrc
Les expressions entre parenthèses permettent d'exclure des caractères en ajoutant le caret (^
) signe. Par exemple, pour faire correspondre tout sauf and
ou end
, utilisez :
grep [^ae]nd .bashrc
Utilisez des expressions entre crochets pour spécifier une plage de caractères en ajoutant un trait d'union (-
) entre la première et la dernière lettre. Par exemple, recherchez toutes les occurrences de lettres majuscules :
grep [A-Z] .bashrc
Combinez les expressions entre parenthèses avec la correspondance des ancres pour trouver tous les mots commençant par des majuscules :
grep ^[A-Z] .bashrc
Les expressions entre parenthèses autorisent plusieurs plages. Par exemple, faites correspondre tous les caractères non alphabétiques avec :
grep [^a-zA-Z] .bashrc
La sortie met en évidence les chiffres et les caractères, en ignorant toutes les lettres.
Classes de personnages
Grep propose des classes de caractères standard en tant que fonctions prédéfinies pour simplifier les expressions entre parenthèses. Vous trouverez ci-dessous un tableau décrivant certaines classes et l'équivalent de l'expression entre parenthèses.
Syntaxe | Description | Équivalent |
---|---|---|
[[:alnum:]] | Toutes les lettres et les chiffres. | "[0-9a-zA-Z]" |
[[:alpha:]] | Toutes les lettres. | "[a-zA-Z]" |
[[:blank:]] | Espaces et tabulations. | [CTRL+V<TAB> ] |
[[:digit:]] | Chiffres de 0 à 9. | [0-9] |
[[:lower:]] | Lettres minuscules. | [a-z] |
[[:punct:]] | Ponctuation et autres caractères. | "[^a-zA-Z0-9]" |
[[:upper:]] | Majuscules. | [A-Z] |
[[:xdigit:]] | Chiffres hexadécimaux. | "[0-9a-fA-F]" |
La liste complète des classes de caractères grep se trouve dans le manuel grep.
Quantificateurs
Les quantificateurs sont des métacaractères qui spécifient le nombre d'apparitions. Le tableau suivant montre chaque syntaxe de quantificateur grep avec une courte description.
Syntaxe | Description |
---|---|
* | Zéro ou plusieurs correspondances. |
? | Zéro ou une correspondance. |
+ | Une ou plusieurs correspondances. |
{n} | n correspondances. |
{n,} | n ou plusieurs correspondances. |
{,m} | Jusqu'à m correspondances. |
{n,m} | De n jusqu'à m correspondances. |
Le *
signe correspond à un motif zéro ou plusieurs fois. Pour démontrer, exécutez la commande suivante :
grep m*and .bashrc
Dans ce cas, le *
le signe correspond à la lettre m
zéro ou plusieurs fois. Par conséquent "and
, mand
, mmand
" sont tous des correspondances. La lettre m
se répète un nombre quelconque de fois lorsqu'il est suivi du *
signe.
Pour faire correspondre zéro ou exactement une correspondance, utilisez le ?
signe. Placez l'instruction entre guillemets simples et échappez le caractère pour éviter toute interprétation. Par exemple :
grep 'm\?and' .bashrc
Vous pouvez également utiliser des expressions régulières étendues pour éviter les échappements :
grep -E 'm?and' .bashrc
La sortie met en évidence toutes les instances de and
ou mand
.
Utilisez des quantificateurs de plage pour spécifier un nombre exact de répétitions. Par exemple, recherchez des chaînes avec deux voyelles :
grep '[aeiouAEIOU]\{2\}' .bashrc
grep -E '[aeiouAEIOU]{2}' .bashrc
La sortie met en surbrillance tous les mots avec deux voyelles.
Alternance
L'alternance permet de définir des correspondances alternatives. Mettez les chaînes alternatives entre guillemets simples et séparez-les par un caractère pipe échappé (\|
).
Par exemple, pour rechercher les mots bash
ou alias
dans le .bashrc fichier, utilisez :
grep 'bash\|alias' .bashrc
Vous pouvez également utiliser l'expression régulière étendue et omettre le caractère d'échappement :
grep -E 'bash|alias' .bashrc
La sortie met en évidence les deux instances de chaîne dans le fichier.
Regroupement
Les expressions régulières permettent de regrouper des motifs en un seul élément. Placez le groupe entre parenthèses échappées pour une regex régulière ou utilisez extended.
Par exemple, recherchez la chaîne bashrc
et faites le rc
caractères facultatifs :
grep 'bash\(rc\)\?' .bashrc
grep -E 'bash(rc)?' .bashrc
La sortie met en évidence toutes les instances de bashrc
. Depuis rc
est facultatif, la commande correspond également au mot bash
.
Expressions spéciales antislash
La commande grep propose quelques expressions antislash uniques pour la correspondance avancée des limites de mots. Vous trouverez ci-dessous un tableau avec de courts exemples pour chaque type d'expression.
Syntaxe | Exemple | Correspondances (Le texte en gras représente les correspondances) |
---|---|---|
\b | '\band\b' | et "et " \et \ |
\B | '\Band' | _et _et _ set het y |
\< | '\et | "et " et y et _ |
\> | 'et\>' | et "et" set _et |
\w | '\wand' | _et _et _ main y sable |
\W | '\Baguette' | "et " /et / |
\s | '\sand' | |
\S | '\Sand' | _et "et " sable main y _et _ /et / |
Par exemple, utilisez \b
frontières pour localiser un mot qui ne fait pas partie d'un autre mot :
grep '\bse[et]\b' .bashrc
L'expression localise les mots see
et set
. La limite assure l'isolation des mots.
Méta-caractères d'échappement
L'échappement des méta-caractères traite les caractères spéciaux comme des littéraux. Par exemple, pour rechercher un point (.) en fin de ligne, échappez le méta-caractère :
grep '\.$' .bashrc
Ne pas autoriser l'interprétation des caractères aide lors de la recherche dans le code source ou les fichiers de configuration.