Traitement de texte et expressions régulières

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, nous explorerons des techniques puissantes de traitement de texte sous Linux, en nous concentrant sur les expressions régulières. Nous utiliserons diverses commandes pour rechercher, filtrer et manipuler le texte, vous fournissant ainsi les compétences essentielles pour travailler avec des données textuelles dans les systèmes d'exploitation de type Unix. Que vous soyez un débutant ou que vous cherchiez à améliorer vos compétences, ce laboratoire vous offrira une solide base en matière de traitement de texte et d'expressions régulières.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/InputandOutputRedirectionGroup(["Input and Output Redirection"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/wildcard("Wildcard Character") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/TextProcessingGroup -.-> linux/sed("Stream Editing") linux/TextProcessingGroup -.-> linux/awk("Text Processing") linux/InputandOutputRedirectionGroup -.-> linux/pipeline("Data Piping") subgraph Lab Skills linux/echo -.-> lab-18003{{"Traitement de texte et expressions régulières"}} linux/touch -.-> lab-18003{{"Traitement de texte et expressions régulières"}} linux/cat -.-> lab-18003{{"Traitement de texte et expressions régulières"}} linux/wildcard -.-> lab-18003{{"Traitement de texte et expressions régulières"}} linux/grep -.-> lab-18003{{"Traitement de texte et expressions régulières"}} linux/sed -.-> lab-18003{{"Traitement de texte et expressions régulières"}} linux/awk -.-> lab-18003{{"Traitement de texte et expressions régulières"}} linux/pipeline -.-> lab-18003{{"Traitement de texte et expressions régulières"}} end

Comprendre les expressions régulières avec Grep

Les expressions régulières (regex) sont des motifs utilisés pour correspondre à des combinaisons de caractères dans des chaînes de caractères. Elles sont fondamentales pour de nombreuses tâches de traitement de texte sous Linux. Nous commencerons par utiliser grep avec des expressions régulières de base.

Tout d'abord, créons un simple fichier texte pour pratiquer :

cd ~/project
echo -e "labex\nexlab\nlab*\nLABEX\nLab" > practice.txt

Cette commande crée un fichier nommé practice.txt dans votre répertoire actuel avec cinq lignes de texte. L'option -e nous permet d'utiliser des caractères d'échappement comme \n pour les nouvelles lignes.

Maintenant, utilisons grep avec une expression régulière de base :

grep "lab" practice.txt

Vous devriez voir :

labex
exlab
lab*

Cette commande correspond à toutes les lignes contenant "lab". Notez que la recherche est sensible à la casse, donc "LABEX" et "Lab" ne sont pas incluses dans la sortie.

Essayons une regex plus spécifique :

grep "^lab" practice.txt

Vous devriez voir :

labex
lab*

Le symbole ^ correspond au début d'une ligne, donc cette commande ne correspond qu'aux lignes qui commencent par "lab".

Maintenant, rendons notre recherche insensible à la casse :

grep -i "lab" practice.txt

Cela devrait correspondre aux cinq lignes du fichier.

Explication :

  • grep est la commande que nous utilisons pour rechercher des motifs.
  • Le motif que nous recherchons est entre guillemets.
  • practice.txt est le fichier dans lequel nous effectuons la recherche.
  • L'option -i rend la recherche insensible à la casse.

Utilisation avancée de Grep

Explorons quelques fonctionnalités plus avancées de grep qui peuvent rendre votre recherche de texte plus puissante et plus efficace.

  1. Afficher les numéros de ligne :

    grep -n "lab" practice.txt

    Cela affichera les numéros de ligne des correspondances. L'option -n indique à grep de préfixer chaque ligne de sortie avec le numéro de ligne dans le fichier texte.

  2. Afficher les lignes avant et après la correspondance :

    grep -C 1 "exlab" practice.txt

    L'option -C 1 affiche 1 ligne de contexte avant et après la ligne correspondante. Vous pouvez ajuster le nombre pour afficher plus ou moins de lignes de contexte.

  3. Inverser la correspondance :

    grep -v "lab" practice.txt

    L'option -v inverse la correspondance, affichant les lignes qui ne contiennent pas le motif. Cela est utile lorsque vous souhaitez exclure certains motifs de vos résultats.

  4. Utiliser des expressions régulières :

    grep "lab[ex]*" practice.txt

    Cette expression régulière correspond à "lab" suivie de n'importe quel nombre de caractères "e" ou "x". Elle montre comment vous pouvez utiliser des motifs plus complexes dans vos recherches.

Explication :

  • L'option -n préfixe chaque ligne de sortie avec son numéro de ligne dans le fichier.
  • -C 1 affiche une ligne de contexte avant et après la correspondance, vous aidant à comprendre le contexte.
  • -v inverse la correspondance, affichant les lignes qui ne correspondent pas au motif.
  • [ex]* est une expression régulière qui correspond à zéro ou plusieurs occurrences de 'e' ou 'x'.

Essayez ces commandes et observez les résultats. Comprendre ces options améliorera considérablement votre capacité à rechercher et filtrer le texte de manière efficace.

Introduction à Sed

sed (éditeur de flux) est un outil puissant pour analyser et transformer le texte. Il est souvent utilisé pour effectuer des modifications automatiques sur des fichiers ou des flux de sortie. Commençons par quelques opérations de base avec sed.

Tout d'abord, créez un nouveau fichier sur lequel travailler :

echo -e "Hello, world\nThis is a test\nHello, labex\nWorld of Linux" > sed_test.txt

Cela crée un fichier nommé sed_test.txt dans votre répertoire actuel avec quatre lignes de texte.

Maintenant, utilisons sed pour remplacer du texte :

sed 's/Hello/Hi/' sed_test.txt

Cette commande remplace la première occurrence de "Hello" par "Hi" sur chaque ligne. Par défaut, sed ne remplace que la première correspondance sur chaque ligne.

Remarque : Dans cet exemple, comme "Hello" n'apparaît qu'une seule fois par ligne, il semble que toutes les occurrences sont remplacées même sans le drapeau g.

Pour mieux comprendre l'effet du drapeau g, modifions sed_test.txt de sorte qu'il y ait plusieurs occurrences de "Hello" sur la même ligne :

echo -e "Hello, world. Hello everyone\nThis is a test\nHello, labex says Hello\nWorld of Linux" > sed_test.txt

Maintenant, le contenu de sed_test.txt est :

Hello, world. Hello everyone
This is a test
Hello, labex says Hello
World of Linux

Exécutez à nouveau la commande de remplacement sans le drapeau g :

sed 's/Hello/Hi/' sed_test.txt

La sortie sera :

Hi, world. Hello everyone
This is a test
Hi, labex says Hello
World of Linux

Vous pouvez voir que seul le premier "Hello" de chaque ligne est remplacé.

Maintenant, effectuons un remplacement global en utilisant le drapeau g :

sed 's/Hello/Hi/g' sed_test.txt

La sortie sera :

Hi, world. Hi everyone
This is a test
Hi, labex says Hi
World of Linux

Cette fois, toutes les occurrences de "Hello" sur chaque ligne sont remplacées par "Hi".

Explication :

  • sed 's/Hello/Hi/' : Remplace le premier "Hello" correspondant sur chaque ligne.
  • sed 's/Hello/Hi/g' : Remplace tous les "Hello" correspondants sur chaque ligne.
  • Le drapeau g signifie "global", indiquant que la substitution doit être effectuée pour chaque occurrence dans la ligne.

Notez que ces commandes ne modifient pas le fichier lui-même ; elles n'affichent que le texte modifié dans le terminal. Pour modifier le fichier en place, utilisez l'option -i :

sed -i 's/Hello/Hi/g' sed_test.txt

Maintenant, vérifiez le contenu du fichier pour voir les modifications :

cat sed_test.txt

Utilisation avancée de Sed

Maintenant que nous comprenons les bases de sed, explorons quelques fonctionnalités plus avancées qui en font un outil puissant pour la manipulation de texte.

  1. Supprimer des lignes :

    sed '2d' sed_test.txt

    Cela supprime la deuxième ligne du fichier. La commande d dans sed signifie "delete" (supprimer).

  2. Insérer du texte :

    sed '1i\First line' sed_test.txt

    Cela insère "First line" avant la première ligne du fichier. La commande i signifie "insert" (insérer).

  3. Ajouter du texte :

    sed '$a\Last line' sed_test.txt

    Cela ajoute "Last line" à la fin du fichier. La commande a signifie "append" (ajouter), et $ représente la dernière ligne.

  4. Plusieurs commandes :

    sed -e 's/Hi/Hello/g' -e 's/labex/LabEx/g' sed_test.txt

    Cela applique plusieurs substitutions en une seule commande. L'option -e vous permet de spécifier plusieurs commandes sed.

  5. Utiliser des expressions régulières :

    sed 's/[Ww]orld/Universe/g' sed_test.txt

    Cela utilise une expression régulière pour correspondre à la fois à "World" et "world", les remplaçant par "Universe".

Explication :

  • 2d supprime la deuxième ligne. Vous pouvez changer le nombre pour supprimer d'autres lignes.
  • 1i\ insère du texte avant la première ligne. Changez le nombre pour insérer à d'autres positions.
  • $a\ ajoute du texte à la fin du fichier.
  • -e vous permet de spécifier plusieurs commandes sed sur une seule ligne.
  • [Ww] est une expression régulière qui correspond soit à la lettre majuscule "W", soit à la lettre minuscule "w".

Essayez ces commandes et observez les résultats. N'oubliez pas que, sauf si vous utilisez l'option -i, ces modifications ne sont pas enregistrées dans le fichier.

Introduction à Awk

awk est un outil puissant de traitement de texte particulièrement adapté pour manipuler des données structurées. Il considère chaque ligne d'entrée comme un enregistrement et chaque mot sur cette ligne comme un champ. Commençons par quelques opérations de base avec awk.

Tout d'abord, créez un nouveau fichier contenant des données structurées :

echo -e "Name Age Country\nAlice 25 USA\nBob 30 Canada\nCharlie 35 UK\nDavid 28 Australia" > awk_test.txt

Cela crée un fichier nommé awk_test.txt avec une ligne d'en-tête et quatre lignes de données.

Maintenant, utilisons awk pour afficher des champs spécifiques :

awk '{print $1}' awk_test.txt

Cela affiche le premier champ (colonne) de chaque ligne. Dans awk, $1 fait référence au premier champ, $2 au deuxième, et ainsi de suite. $0 fait référence à l'ensemble de la ligne.

Pour afficher plusieurs champs :

awk '{print $1, $2}' awk_test.txt

Cela affiche le premier et le deuxième champ de chaque ligne.

Nous pouvons également utiliser des conditions :

awk '$2 > 28 {print $1 " is over 28"}' awk_test.txt

Cela affiche les noms des personnes âgées de plus de 28 ans.

Essayons quelque chose de plus complexe :

awk 'NR > 1 {sum += $2} END {print "Average age:", sum/(NR-1)}' awk_test.txt

Cela calcule et affiche l'âge moyen, en sautant la ligne d'en-tête.

Explication :

  • Dans awk, chaque ligne est automatiquement divisée en champs, généralement par des espaces.
  • $1, $2, etc., font référence au premier, deuxième, etc., champ de chaque ligne.
  • NR est une variable interne qui représente le numéro de l'enregistrement (ligne) actuel.
  • Le bloc END est exécuté après le traitement de toutes les lignes.
  • sum += $2 ajoute la valeur du deuxième champ (âge) à un total cumulatif.

Essayez ces commandes et observez les résultats. awk est incroyablement puissant pour les tâches de traitement de données.

Résumé

Dans ce laboratoire, vous avez appris les bases de trois commandes puissantes de traitement de texte sous Linux :

  1. grep : Pour rechercher des motifs de texte à l'aide d'expressions régulières.
  2. sed : Pour l'édition de flux et la transformation de texte.
  3. awk : Pour le traitement avancé de texte et l'extraction de données.

En particulier, lors de l'utilisation de sed, nous avons approfondi l'effet du drapeau g. Sans le drapeau g, sed ne remplace que la première occurrence correspondante sur chaque ligne ; avec le drapeau g, il remplace toutes les occurrences correspondantes sur chaque ligne. En modifiant le fichier d'exemple pour inclure plusieurs correspondances sur la même ligne, nous avons clairement observé l'effet du drapeau g.

Ces outils sont essentiels pour tout utilisateur Linux ou administrateur système. Ils vous permettent de rechercher efficacement dans des fichiers, de modifier du texte et d'extraire des données spécifiques à partir de fichiers texte structurés. Au fur et à mesure que vous vous familiariserez avec ces commandes, vous constaterez qu'elles peuvent grandement simplifier de nombreuses tâches de traitement de texte dans votre travail quotidien avec les systèmes Linux.

N'oubliez pas que la pratique est la clé pour maîtriser ces outils. Essayez de les utiliser dans différents scénarios et explorez leurs pages de manuel (man grep, man sed, man awk) pour découvrir des fonctionnalités et des options plus avancées. Chacune de ces commandes a bien plus de capacités que celles que nous avons couvertes ici, et apprendre à les utiliser efficacement peut améliorer considérablement votre productivité lors de la manipulation de fichiers texte sous Linux.