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 produit | Prix | Acheter |
|---|---|---|
| eBook : Présentation du guide de démarrage Awk pour les débutants | 8,99 $ | [Acheter maintenant] |
Merci d’avoir lu et pour tout ajout ou clarification, postez un commentaire dans la section des commentaires.









