Lorsque nous exécutons certaines commandes sous Unix/Linux pour lire ou modifier du texte à partir d'une chaîne ou d'un fichier, nous essayons la plupart du temps de filtrer la sortie vers une section d'intérêt donnée. C'est là que l'utilisation d'expressions régulières devient utile.
Lire aussi : 10 opérateurs de chaînage Linux utiles avec des exemples pratiques
Que sont les expressions régulières ?
Une expression régulière peut être définie comme une chaîne représentant plusieurs séquences de caractères. L'un des aspects les plus importants 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 texte ou d'un fichier de configuration, etc.
Fonctionnalités de l'expression régulière
Les expressions régulières sont constituées de :
- Caractères ordinaires tels que l'espace, le trait de soulignement (_), A-Z, a-z, 0-9.
- Méta-caractères qui sont étendus aux caractères ordinaires, ils 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.[ character(s) ]
il correspond à n'importe lequel des caractères spécifiés dans caractère(s), on peut aussi utiliser un trait d'union(-)
signifie une plage de caractères tels que[a-f]
,[1-5]
, et ainsi de suite.^
il correspond au début d'une ligne dans un fichier.$
correspond à la fin de ligne dans un fichier.\
c'est un caractère d'échappement.
Afin de filtrer le texte, il faut utiliser un outil de filtrage de texte tel que awk . Vous pouvez penser à awk comme un langage de programmation à part entière. Mais pour la portée de ce guide d'utilisation de awk , nous le couvrirons comme un simple outil de filtrage de ligne de commande.
La syntaxe générale de awk est :
# awk 'script' filename
Où 'script'
est un ensemble de commandes comprises par awk et sont exécutés sur le fichier, nom de fichier.
Cela fonctionne en lisant une ligne donnée dans le fichier, en fait une copie et exécute ensuite 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ù motif est une expression régulière et l'action est ce que fera awk 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 dont nous avons parlé ci-dessus sous les fonctionnalités de awk.
Un exemple simple d'utilisation d'awk :
L'exemple ci-dessous imprime toutes les lignes du fichier /etc/hosts puisqu'aucun modèle n'est donné.
# awk '//{print}'/etc/hosts
Utiliser Awk avec Pattern :
Dans l'exemple ci-dessous, un pattern localhost
a été donné, donc awk correspondra à la ligne ayant localhost dans le /etc/hosts
fichier.
# awk '/localhost/{print}' /etc/hosts
Utiliser Awk avec le caractère générique (.) dans un motif
Le (.)
correspondra aux chaînes contenant loc , hôte local , réseau local dans l'exemple ci-dessous.
C'est-à-dire * l some_single_character c * .
# awk '/l.c/{print}' /etc/hosts
Utiliser Awk avec le caractère (*) dans un motif
Il correspondra aux chaînes contenant localhost , réseau local , lignes , 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
ce qui signifie correspondre aux chaînes qui commencent par la lettre t
et se termine 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 utiliserez le modèle /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 (*)
dans /t*t/
le caractère générique permet à awk de choisir la dernière option :
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
Utiliser Awk avec set [ caractère(s) ]
Prenons 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 aux chaînes commençant par K
ou k
suivi de T
:
# awk '/[Kk]T/{print}' /etc/hosts
Spécification des 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
Toute la ligne du fichier /etc/hosts contenir au moins un seul chiffre [0-9]
dans l'exemple ci-dessus.
Utilisez Awk avec le méta-caractère (^)
Il correspond à toutes les lignes qui commencent par le modèle fourni comme dans l'exemple ci-dessous :
# awk '/^fe/{print}' /etc/hosts # awk '/^ff/{print}' /etc/hosts
Utilisez Awk avec le méta-caractère ($)
Il correspond à toutes les lignes qui se terminent par le modèle fourni :
# awk '/ab$/{print}' /etc/hosts # awk '/ost$/{print}' /etc/hosts # awk '/rs$/{print}' /etc/hosts
Utilisez Awk avec le caractère d'échappement (\)
Il permet de prendre le caractère qui le suit comme un 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, la deuxième commande 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 car un caractère d'échappement a été utilisé pour lire $ tel quel.
# awk '//{print}' deals.txt # awk '/$25.00/{print}' deals.txt # awk '/\$25.00/{print}' deals.txt
Résumé
Ce n'est pas tout avec le awk outil de filtrage de ligne de commande, les exemples ci-dessus et les opérations de base de awk. Dans les prochaines parties, nous verrons comment utiliser les fonctionnalités complexes d'awk. Merci d'avoir lu et pour tout ajout ou clarification, postez un commentaire dans la section des commentaires.