Recherche de motifs sous Linux

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à utiliser la commande Linux grep pour rechercher des motifs dans des fichiers texte. La commande grep est un outil puissant qui vous permet de rechercher dans des fichiers pour trouver des motifs de texte spécifiques. Cette compétence est essentielle pour tout utilisateur Linux, des débutants aux administrateurs système avancés. Tout au long de ce laboratoire, vous apprendrez à utiliser les fonctionnalités de base de grep, à explorer diverses options pour améliorer vos recherches et à pratiquer avec plusieurs fichiers et des motifs plus complexes. À la fin de ce laboratoire, vous aurez une solide base pour utiliser grep pour effectuer des recherches de texte efficaces sous Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/InputandOutputRedirectionGroup(["Input and Output Redirection"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/wildcard("Wildcard Character") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/InputandOutputRedirectionGroup -.-> linux/pipeline("Data Piping") subgraph Lab Skills linux/echo -.-> lab-271291{{"Recherche de motifs sous Linux"}} linux/cat -.-> lab-271291{{"Recherche de motifs sous Linux"}} linux/wildcard -.-> lab-271291{{"Recherche de motifs sous Linux"}} linux/grep -.-> lab-271291{{"Recherche de motifs sous Linux"}} linux/pipeline -.-> lab-271291{{"Recherche de motifs sous Linux"}} end

Utilisation de base de la commande grep

La commande grep est un outil puissant de recherche de texte sous Linux. Le nom grep signifie "Global Regular Expression Print" (Affichage global des expressions régulières), et il vous permet de rechercher des motifs de texte spécifiques dans des fichiers.

Commençons par créer un simple fichier texte avec lequel travailler :

echo "Welcome to Linux pattern searching." > ~/project/grep_lab/sample.txt
echo "This file contains text for our grep examples." >> ~/project/grep_lab/sample.txt
echo "The grep command helps find specific patterns in text files." >> ~/project/grep_lab/sample.txt
echo "Learning grep is essential for any Linux user." >> ~/project/grep_lab/sample.txt

Cela crée un fichier appelé sample.txt dans le répertoire grep_lab avec quatre lignes de texte. Vous pouvez vérifier le contenu du fichier en utilisant la commande cat :

cat ~/project/grep_lab/sample.txt

Vous devriez voir la sortie suivante :

Welcome to Linux pattern searching.
This file contains text for our grep examples.
The grep command helps find specific patterns in text files.
Learning grep is essential for any Linux user.

Maintenant, utilisons la commande grep de base pour rechercher un mot spécifique dans ce fichier. La syntaxe de base de grep est :

grep [pattern] [file]

Par exemple, pour rechercher le mot "Linux" dans notre fichier d'exemple :

grep "Linux" ~/project/grep_lab/sample.txt

Cela affichera toutes les lignes du fichier qui contiennent le mot "Linux" :

Welcome to Linux pattern searching.
Learning grep is essential for any Linux user.

Notez que grep renvoie toute la ligne qui contient le motif que vous avez recherché, pas seulement le motif lui - même.

Essayons de rechercher un autre mot :

grep "grep" ~/project/grep_lab/sample.txt

Cela devrait renvoyer :

The grep command helps find specific patterns in text files.
Learning grep is essential for any Linux user.

Par défaut, grep respecte la casse, ce qui signifie que rechercher "grep" ne correspondra pas à "Grep" ou "GREP". Nous apprendrons comment effectuer des recherches insensibles à la casse à l'étape suivante.

Utilisation des options de base de grep

Dans cette étape, nous allons explorer quelques options utiles qui rendent la commande grep plus polyvalente. Les options les plus couramment utilisées sont :

  • -i : Effectuer une recherche insensible à la casse
  • -c : Compter le nombre de lignes correspondantes
  • -n : Afficher les numéros de ligne en plus des lignes correspondantes
  • -v : Inverser la correspondance (afficher les lignes qui ne correspondent pas au motif)

Recherche insensible à la casse (-i)

Commençons par essayer une recherche insensible à la casse en utilisant l'option -i :

grep -i "linux" ~/project/grep_lab/sample.txt

Cela correspondra à "linux", "Linux", "LINUX" ou toute autre variation de casse :

Welcome to Linux pattern searching.
Learning grep is essential for any Linux user.

Comptage des correspondances (-c)

Pour compter combien de lignes contiennent un motif spécifique, utilisez l'option -c :

grep -c "grep" ~/project/grep_lab/sample.txt

Cela renverra le nombre de lignes contenant le mot "grep" :

2

Améliorons notre fichier d'exemple avec plus de contenu :

echo "Grep can search using regular expressions too." >> ~/project/grep_lab/sample.txt
echo "Using GREP with different options makes it powerful." >> ~/project/grep_lab/sample.txt

Maintenant, combinons des options. Par exemple, pour compter les correspondances insensibles à la casse de "grep" :

grep -ic "grep" ~/project/grep_lab/sample.txt

Cela devrait renvoyer :

4

Affichage des numéros de ligne (-n)

Pour voir quelles lignes contiennent votre motif ainsi que leurs numéros de ligne :

grep -n "Linux" ~/project/grep_lab/sample.txt

La sortie affichera les numéros de ligne suivis des lignes correspondantes :

1:Welcome to Linux pattern searching.
4:Learning grep is essential for any Linux user.

Inversion des correspondances (-v)

Parfois, vous voulez trouver les lignes qui ne CONTIENNENT PAS un motif spécifique. Utilisez l'option -v :

grep -v "grep" ~/project/grep_lab/sample.txt

Cela affichera toutes les lignes qui ne contiennent pas le mot "grep" :

Welcome to Linux pattern searching.
This file contains text for our grep examples.

Essayez de combiner différentes options pour voir comment elles fonctionnent ensemble. Par exemple :

grep -in "GREP" ~/project/grep_lab/sample.txt

Cela effectue une recherche insensible à la casse pour "GREP" et affiche les numéros de ligne.

Recherche dans plusieurs fichiers

Dans les scénarios réels, vous avez souvent besoin de rechercher dans plusieurs fichiers. La commande grep facilite cela en vous permettant de spécifier plusieurs fichiers ou d'utiliser des caractères génériques (wildcards).

Créons quelques autres fichiers avec lesquels travailler :

echo "Linux is a free and open - source operating system." > ~/project/grep_lab/os.txt
echo "Unix was developed in the 1970s at Bell Labs." >> ~/project/grep_lab/os.txt
echo "Many modern operating systems are Unix - like." >> ~/project/grep_lab/os.txt

echo "The command line is a text interface for your computer." > ~/project/grep_lab/commands.txt
echo "Basic commands include ls, cd, grep, and find." >> ~/project/grep_lab/commands.txt
echo "Learning Linux commands increases productivity." >> ~/project/grep_lab/commands.txt

Recherche dans des fichiers spécifiques

Pour rechercher dans plusieurs fichiers, il suffit de les lister après le motif :

grep "Linux" ~/project/grep_lab/sample.txt ~/project/grep_lab/os.txt ~/project/grep_lab/commands.txt

La sortie inclura le nom du fichier avant chaque ligne correspondante :

/home/labex/project/grep_lab/sample.txt:Welcome to Linux pattern searching.
/home/labex/project/grep_lab/sample.txt:Learning grep is essential for any Linux user.
/home/labex/project/grep_lab/os.txt:Linux is a free and open - source operating system.
/home/labex/project/grep_lab/commands.txt:Learning Linux commands increases productivity.

Utilisation de caractères génériques

Vous pouvez utiliser des caractères génériques pour rechercher dans plusieurs fichiers ayant des noms similaires :

grep "command" ~/project/grep_lab/*.txt

Cela recherche "command" dans tous les fichiers .txt du répertoire grep_lab :

/home/labex/project/grep_lab/commands.txt:The command line is a text interface for your computer.
/home/labex/project/grep_lab/commands.txt:Basic commands include ls, cd, grep, and find.
/home/labex/project/grep_lab/sample.txt:The grep command helps find specific patterns in text files.

Recherche récursive

Pour rechercher dans tous les fichiers d'un répertoire et de ses sous - répertoires, utilisez l'option -r :

Créons un sous - répertoire avec un fichier :

mkdir -p ~/project/grep_lab/subdir
echo "Linux commands are powerful tools for file management." > ~/project/grep_lab/subdir/tools.txt

Maintenant, effectuons une recherche récursive :

grep -r "Linux" ~/project/grep_lab/

Cela recherchera "Linux" dans tous les fichiers du répertoire grep_lab et de ses sous - répertoires.

Affichage uniquement des noms de fichiers

Si vous ne voulez voir que les fichiers qui contiennent une correspondance (et non les lignes correspondantes elles - mêmes), utilisez l'option -l :

grep -l "Linux" ~/project/grep_lab/*.txt

Cela affichera uniquement les noms de fichiers qui contiennent des correspondances :

/home/labex/project/grep_lab/commands.txt
/home/labex/project/grep_lab/os.txt
/home/labex/project/grep_lab/sample.txt

Essayez de combiner ces techniques avec les options que vous avez apprises à l'étape précédente. Par exemple, pour trouver tous les fichiers contenant "linux" (insensible à la casse) et n'afficher que leurs noms :

grep -il "linux" ~/project/grep_lab/*.txt

Utilisation des expressions régulières avec grep

L'une des fonctionnalités les plus puissantes de grep est sa capacité à utiliser des expressions régulières (regex) pour la correspondance de motifs. Les expressions régulières vous permettent de rechercher des motifs complexes plutôt que simplement du texte exact.

Caractères de base des expressions régulières

Voici quelques caractères spéciaux de regex courants :

  • . (point) : Correspond à n'importe quel caractère unique
  • ^ : Correspond au début d'une ligne
  • $ : Correspond à la fin d'une ligne
  • * : Correspond à zéro ou plusieurs occurrences du caractère précédent
  • [] : Correspond à l'un des caractères entre les crochets
  • [^] : Correspond à n'importe quel caractère qui n'est PAS entre les crochets

Créons un nouveau fichier avec un contenu plus varié pour pratiquer :

cat > ~/project/grep_lab/regex_practice.txt << EOF
apple
banana
orange
grape
Apple
pineapple
watermelon
123-456-7890
[email protected]
https://www.example.com
The quick brown fox jumps over the lazy dog.
EOF

Correspondance de n'importe quel caractère avec le point (.)

Le point (.) dans une regex correspond à n'importe quel caractère unique :

grep "a..le" ~/project/grep_lab/regex_practice.txt

Cela correspondra à des mots comme "apple" où n'importe deux caractères peuvent apparaître entre 'a' et 'le' :

apple
pineapple

Correspondance du début de ligne (^)

Le caractère circonflexe (^) correspond aux motifs au début d'une ligne :

grep "^a" ~/project/grep_lab/regex_practice.txt

Cela correspond aux lignes qui commencent par la lettre 'a' :

apple

Correspondance de la fin de ligne ($)

Le signe dollar ($) correspond aux motifs à la fin d'une ligne :

grep "e$" ~/project/grep_lab/regex_practice.txt

Cela correspond aux lignes qui se terminent par la lettre 'e' :

apple
grape
pineapple
orange

Classes de caractères avec les crochets []

Les crochets vous permettent de spécifier un ensemble de caractères à correspondre :

grep "[0-9]" ~/project/grep_lab/regex_practice.txt

Cela correspond à n'importe quelle ligne contenant un chiffre :

123-456-7890

Vous pouvez combiner les classes de caractères :

grep "[a-zA-Z0-9]" ~/project/grep_lab/regex_practice.txt

Cela correspond à n'importe quelle ligne contenant des caractères alphanumériques (ce qui sera toutes les lignes de notre fichier).

Classes de caractères négatives [^]

Pour correspondre à des caractères qui ne font pas partie d'un ensemble, utilisez [^] :

grep "^[^aeiou]" ~/project/grep_lab/regex_practice.txt

Cela correspond aux lignes qui commencent par un caractère qui n'est PAS une voyelle :

banana
grape
pineapple
watermelon
123-456-7890
[email protected]
https://www.example.com
The quick brown fox jumps over the lazy dog.

Expressions régulières étendues avec -E

Pour des fonctionnalités de regex plus avancées, utilisez l'option -E (ou utilisez egrep) :

grep -E "(apple|grape)" ~/project/grep_lab/regex_practice.txt

Cela correspond aux lignes contenant soit "apple" soit "grape" :

apple
grape
pineapple

Essayez d'expérimenter avec différentes expressions régulières pour vous familiariser davantage avec la correspondance de motifs. Les expressions régulières sont une compétence qui s'acquiert avec la pratique !

Applications pratiques de grep

Dans cette étape finale, nous allons explorer quelques applications pratiques de grep couramment utilisées dans les environnements Linux du monde réel. Ces exemples vous aideront à comprendre comment grep peut être utilisé dans les tâches quotidiennes.

Recherche de messages d'erreur dans les fichiers journaux

Les administrateurs système recherchent souvent les fichiers journaux pour trouver des messages d'erreur. Créons un fichier journal d'exemple :

cat > ~/project/grep_lab/system.log << EOF
[2023-06-01 08:00:15] INFO: System startup completed
[2023-06-01 08:15:22] WARNING: High memory usage detected
[2023-06-01 08:30:45] ERROR: Failed to connect to database
[2023-06-01 09:00:10] INFO: Backup process started
[2023-06-01 09:15:30] ERROR: Disk space critically low
[2023-06-01 09:30:40] INFO: User john logged in
[2023-06-01 10:00:25] WARNING: Network packet loss detected
[2023-06-01 10:30:50] INFO: Scheduled maintenance completed
EOF

Pour trouver tous les messages d'erreur :

grep "ERROR" ~/project/grep_lab/system.log

Sortie :

[2023-06-01 08:30:45] ERROR: Failed to connect to database
[2023-06-01 09:15:30] ERROR: Disk space critically low

Pour trouver à la fois les avertissements et les erreurs (en utilisant le OU avec l'option -E) :

grep -E "WARNING|ERROR" ~/project/grep_lab/system.log

Sortie :

[2023-06-01 08:15:22] WARNING: High memory usage detected
[2023-06-01 08:30:45] ERROR: Failed to connect to database
[2023-06-01 09:15:30] ERROR: Disk space critically low
[2023-06-01 10:00:25] WARNING: Network packet loss detected

Combinaison de grep avec d'autres commandes à l'aide de tubes

Le véritable pouvoir de grep devient apparent lorsqu'il est combiné avec d'autres commandes à l'aide de tubes (|). Le tube prend la sortie d'une commande et la transmet en entrée à une autre.

Exemple 1 : Lister uniquement les fichiers texte qui contiennent un mot spécifique

ls -l ~/project/grep_lab/ | grep "\.txt"

Cela liste tous les fichiers du répertoire, puis filtre pour n'afficher que ceux ayant l'extension .txt.

Exemple 2 : Trouver les processus liés à un programme spécifique

ps aux | grep "bash"

Cela liste tous les processus en cours d'exécution, puis filtre pour n'afficher que ceux liés à "bash".

Exemple 3 : Compter les correspondances

Pour compter le nombre de messages d'erreur dans notre fichier journal :

grep -c "ERROR" ~/project/grep_lab/system.log

Sortie :

2

Contrôle du contexte avec grep

Parfois, il est utile de voir non seulement la ligne correspondante, mais aussi un peu de contexte autour d'elle :

  • -A n : Afficher n lignes après la correspondance
  • -B n : Afficher n lignes avant la correspondance
  • -C n : Afficher n lignes avant et après la correspondance
grep -A 1 "ERROR" ~/project/grep_lab/system.log

Cela affiche chaque ligne contenant "ERROR" plus une ligne après :

[2023-06-01 08:30:45] ERROR: Failed to connect to database
[2023-06-01 09:00:10] INFO: Backup process started
--
[2023-06-01 09:15:30] ERROR: Disk space critically low
[2023-06-01 09:30:40] INFO: User john logged in

Mise en évidence des correspondances

Pour une meilleure visibilité, vous pouvez utiliser l'option --color pour mettre en évidence le texte correspondant :

grep --color "ERROR" ~/project/grep_lab/system.log

Cela affichera les mêmes résultats que précédemment, mais le mot "ERROR" sera mis en évidence en couleur.

Ces exemples pratiques démontrent que grep est un outil essentiel pour naviguer et analyser des données textuelles sous Linux. Au fur et à mesure que vous continuerez à travailler avec Linux, vous trouverez d'innombrables situations où grep vous aidera à trouver exactement ce que vous recherchez de manière efficace.

Résumé

Dans ce laboratoire, vous avez appris à utiliser la commande Linux grep pour rechercher des motifs dans des fichiers texte. Voici un résumé de ce que vous avez accompli :

  1. Vous avez commencé par l'utilisation de base de grep, en apprenant à rechercher des motifs de texte simples dans un fichier.

  2. Vous avez exploré diverses options de grep telles que -i pour une recherche insensible à la casse, -c pour compter les correspondances, -n pour afficher les numéros de ligne et -v pour inverser les correspondances.

  3. Vous avez appris à effectuer des recherches dans plusieurs fichiers en utilisant des listes de fichiers explicites et des caractères génériques, ainsi qu'à effectuer des recherches récursives dans des répertoires avec l'option -r.

  4. Vous avez approfondi l'utilisation des expressions régulières avec grep pour créer des motifs de recherche plus complexes, y compris la correspondance de caractères avec ., les ancres de ligne avec ^ et $, et les classes de caractères avec [].

  5. Enfin, vous avez exploré des applications pratiques de grep telles que la recherche dans des fichiers journaux, la combinaison de grep avec d'autres commandes à l'aide de tubes et l'utilisation du contrôle de contexte pour voir les lignes avant et après les correspondances.

La commande grep est l'un des outils les plus polyvalents et puissants de l'arsenal des commandes Linux. Les compétences que vous avez acquises dans ce laboratoire sont fondamentales pour les utilisateurs de Linux et vous seront utiles dans divers environnements et tâches Linux. Au fur et à mesure que vous continuerez à travailler avec Linux, vous découvrirez encore plus de façons d'utiliser grep pour trouver et traiter efficacement des données textuelles.