Recherche de site Web

Comment filtrer du texte sous Linux avec awk et des expressions régulières


Lorsque nous exécutons certaines commandes sous Linux pour lire ou modifier le texte d’une chaîne ou d’un fichier, nous essayons souvent de filtrer la sortie sur une section spécifique qui nous intéresse. C’est là que l’utilisation d’expressions régulières s’avère utile.

Que sont les expressions régulières ?

Une expression régulière peut être définie comme des chaînes qui représentent plusieurs séquences de caractères. L’une des choses les plus importantes à propos des expressions régulières est qu’elles vous permettent de filtrer la sortie d’une commande ou d’un fichier, de modifier une section d’un fichier de texte ou de configuration, etc.

Caractéristiques de l’expression régulière

Les expressions régulières sont constituées de :

  • Caractères ordinaires tels que espace, trait de soulignement (_), A-Z, a-z, 0-9.
  • Les méta-caractères qui sont étendus aux caractères ordinaires incluent :

    • (.) Il correspond à n’importe quel caractère unique à l’exception d’un retour à la ligne.
    • (*) il correspond à zéro ou plusieurs existences du caractère immédiat qui le précède.
    • [ caractère(s) ] il correspond à l’un des caractères spécifiés dans le(s) caractère(s), on peut également utiliser un trait d’union (-) pour désigner une plage de caractères tels que [a-f], [1-5], etc.
    • ^ Il correspond au début d’une ligne dans un fichier.
    • $ correspond à la fin de la ligne dans un fichier.
    • \ Il s’agit d’un caractère d’échappement.

Pour filtrer le texte, il faut utiliser un outil de filtrage de texte tel que awk. Vous pouvez considérer awk comme un langage de programmation à part entière. Mais dans le cadre de ce guide d’utilisation d’awk, nous le couvrirons comme un simple outil de filtrage en ligne de commande.

La syntaxe générale de awk est la suivante :

awk 'script' filename

Où 'script' est un ensemble de commandes qui sont comprises par awk et sont exécutées sur le fichier, nom de fichier.

Il fonctionne en lisant une ligne donnée dans le fichier, en faisant une copie de la ligne, puis en exécutant le script sur la ligne. Ceci est répété sur toutes les lignes du fichier.

Le 'script' est sous la forme '/pattern/ action' où le motif est une expression régulière et l'action est ce que awk fera lorsqu'il trouvera le motif donné dans une ligne.

Comment utiliser l’outil de filtrage awk sous Linux

Dans les exemples suivants, nous nous concentrerons sur les méta-caractères que nous avons abordés ci-dessus sous les fonctionnalités d’awk.

Impression de toutes les lignes d’un fichier à l’aide d’awk

L’exemple ci-dessous affiche toutes les lignes du fichier /etc/hosts puisqu’aucun motif n’est donné.

awk '//{print}'/etc/hosts

Utiliser des modèles awk : faire correspondre les lignes avec 'localhost' dans le fichier

Dans l’exemple ci-dessous, un modèle localhost a été donné, donc awk correspondra à la ligne ayant localhost dans le fichier /etc/hosts.

awk '/localhost/{print}' /etc/hosts 

Utilisation de Awk avec (.) Caractère générique dans un motif

Le (.) correspondra aux chaînes contenant loc, localhost, localnet dans l’exemple ci-dessous.

C’est-à-dire * l some_single_character c *.

awk '/l.c/{print}' /etc/hosts

Utilisation de Awk avec le caractère (*) dans un motif

Il correspondra aux chaînes contenant localhost, localnet, lines, capable, comme dans l’exemple ci-dessous :

awk '/l*c/{print}' /etc/localhost

Vous vous rendrez également compte que (*) essaie de vous obtenir la correspondance la plus longue possible qu’il peut détecter.

Regardons un cas qui le démontre, prenons l’expression régulière t*t qui signifie des chaînes correspondantes qui commencent par la lettre t et se terminent par t dans la ligne ci-dessous :

this is tecmint, where you get the best good tutorials, how to's, guides, tecmint. 

Vous obtiendrez les possibilités suivantes lorsque vous utilisez le motif /t*t/ :

this is t
this is tecmint
this is tecmint, where you get t
this is tecmint, where you get the best good t
this is tecmint, where you get the best good tutorials, how t
this is tecmint, where you get the best good tutorials, how tos, guides, t
this is tecmint, where you get the best good tutorials, how tos, guides, tecmint

Et (*) en caractère générique /t*t/ permet à awk de choisir la dernière option :

this is tecmint, where you get the best good tutorials, how to's, guides, tecmint

Utilisation de Awk avec l’ensemble [ caractère(s) ]

Prenez par exemple l’ensemble [al1], ici awk correspondra à toutes les chaînes contenant le caractère a ou l ou 1 dans une ligne du fichier /etc/hosts.

awk '/[al1]/{print}' /etc/hosts

L’exemple suivant correspond à des chaînes commençant par K ou k suivi de T :

# awk '/[Kk]T/{print}' /etc/hosts 

Spécification de caractères dans une plage

Comprendre les caractères avec awk :

  • [0-9] signifie un seul numéro
  • [a-z] signifie correspondre à une seule lettre minuscule
  • [A-Z] signifie correspondre à une seule lettre majuscule
  • [a-zA-Z] signifie correspondre à une seule lettre
  • [a-zA-Z 0-9] signifie correspondre à une seule lettre ou à un seul chiffre

Regardons un exemple ci-dessous :

awk '/[0-9]/{print}' /etc/hosts 

Toutes les lignes du fichier /etc/hosts contiennent au moins un seul nombre [0-9] dans l’exemple ci-dessus.

Utiliser Awk avec (^) Méta-caractère

Il correspond à toutes les lignes qui commencent par le motif fourni comme dans l’exemple ci-dessous :

# awk '/^fe/{print}' /etc/hosts
awk '/^ff/{print}' /etc/hosts

Utiliser Awk avec le méta-caractère ($)

Il correspond à toutes les lignes qui se terminent par le motif fourni :

awk '/ab$/{print}' /etc/hosts
awk '/ost$/{print}' /etc/hosts
awk '/rs$/{print}' /etc/hosts

Utiliser Awk avec (\) Caractère d’échappement

Il permet de prendre le caractère qui le suit au sens littéral, c’est-à-dire de le considérer tel qu’il est.

Dans l’exemple ci-dessous, la première commande imprime toutes les lignes du fichier, et la seconde n’imprime rien car je veux faire correspondre une ligne qui a $25.00, mais aucun caractère d’échappement n’est utilisé.

La troisième commande est correcte puisqu’un caractère d’échappement a été utilisé pour lire $ tel quel.

awk '//{print}' deals.txt
awk '/\.00/{print}' deals.txt
awk '/\\.00/{print}' deals.txt

Résumé

Ce n’est pas tout avec l’outil de filtrage de ligne de commande awk, les exemples ci-dessus et les opérations de base de awk. Dans les prochaines parties, nous allons avancer sur la façon d’utiliser les fonctionnalités complexes d’awk.

Pour ceux qui recherchent une ressource complète, nous avons compilé tous les articles de la série Awk dans un livre, qui comprend 13 chapitres et s’étend sur 41 pages, couvrant à la fois l’utilisation de base et avancée d’Awk avec des exemples pratiques.

Nom du produitPrixAcheter
eBook : Présentation du guide de démarrage Awk pour les débutants8,99 $[Acheter maintenant]

Merci d’avoir lu et pour tout ajout ou clarification, postez un commentaire dans la section des commentaires.

Articles connexes: