Lorsque nous exécutons certaines commandes sous Linux pour lire ou modifier du texte à partir d’une chaîne ou d’un fichier, nous essayons souvent de filtrer la sortie pour une section spécifique d’intérêt. C’est là que l’utilisation des expressions régulières est utile.
Qu’est-ce que les expressions régulières?
A regular expression can be defined as strings that represent several sequences of characters. One of the most important things about regular expressions is that they allow you to filter the output of a command or file, edit a section of a text or configuration file, and so on.
Caractéristiques des expressions régulières
Les expressions régulières sont composées de :
- Caractères ordinaires tels que l’espace, le tiret bas (_), A-Z, a-z, 0-9.
- Méta-caractères qui sont étendus en caractères ordinaires, comprennent :
(.)
il correspond à n’importe quel caractère unique sauf un retour à la ligne.(*)
il correspond à zéro ou plusieurs occurrences du caractère immédiatement précédent.[ caractère(s) ]
il correspond à l’un des caractères spécifiés dans caractère(s), on peut également utiliser un tiret(-)
pour signifier une plage de caractères comme[a-f]
,[1-5]
, et ainsi de suite.^
il correspond au début d’une ligne dans un fichier.$
correspond à la fin de la ligne dans un fichier.\
c’est un caractère d’échappement.
Pour filtrer du 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 pour le cadre de ce guide sur l’utilisation de awk, nous le couvrirons comme un simple outil de filtrage en 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 exécutées sur le fichier, nom_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. Cela est répété sur toutes les lignes du fichier.
Le 'script'
est sous la forme '/motif/ action'
où le motif est une expression régulière et l’action est ce que awk fera lorsqu’il trouve 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étacaractères que nous avons discutés ci-dessus dans les fonctionnalités d’awk.
Imprimer toutes les lignes du fichier en utilisant Awk
L’exemple ci-dessous imprime toutes les lignes du fichier /etc/hosts car aucun motif n’est donné.
awk '//{print}'/etc/hosts

Utiliser des motifs Awk : Correspondance de lignes avec ‘localhost’ dans le fichier
Dans l’exemple ci-dessous, un motif localhost
est donné, donc awk correspondra à la ligne contenant localhost dans le fichier /etc/hosts
.
awk '/localhost/{print}' /etc/hosts

Utilisation d’Awk avec le Joker (.) dans un Motif
Le (.)
correspondra aux chaînes contenant loc, localhost, localnet dans l’exemple ci-dessous.
C’est-à-dire * l un seul caractère quelconque c *.
awk '/l.c/{print}' /etc/hosts

Utilisation d’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 remarquerez également que (*)
essaie d’obtenir la correspondance la plus longue possible qu’il peut détecter.
Jetons un coup d’œil à un cas qui le démontre, prenons l’expression régulière t*t
qui signifie correspondre aux chaînes 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 (*)
dans le caractère de joker /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 d’Awk avec un ensemble [ 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 dans le fichier /etc/hosts.
awk '/[al1]/{print}' /etc/hosts

L’exemple suivant correspond aux chaînes commençant par K
ou k
suivies de T
:
# awk '/[Kk]T/{print}' /etc/hosts

Spécifier des caractères dans une plage
Comprendre les caractères avec awk:
[0-9]
signifie un seul chiffre[a-z]
signifie faire correspondre une seule lettre minuscule[A-Z]
signifie faire correspondre une seule lettre majuscule[a-zA-Z]
signifie faire correspondre une seule lettre[a-zA-Z 0-9]
signifie faire correspondre une seule lettre ou un chiffre
Regardons un exemple ci-dessous :
awk '/[0-9]/{print}' /etc/hosts

Toutes les lignes du fichier /etc/hosts contiennent au moins un seul chiffre [0-9]
dans l’exemple ci-dessus.
Utiliser Awk avec le métacaractère (^)
Cela fait correspondre 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étacaractère ($)
Cela fait correspondre 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 le caractère d’échappement (\)
Cela vous permet de prendre le caractère qui suit comme un littéral, c’est-à-dire de le considérer tel quel.
Dans l’exemple ci-dessous, le premier commandement imprime toutes les lignes du fichier, et le deuxième commandement n’imprime rien car je veux faire correspondre une ligne qui contient $25.00, mais aucun caractère d’échappement n’est utilisé.
Le troisième commandement est correct car un caractère d’échappement a été utilisé pour lire $ tel qu’il est.
awk '//{print}' deals.txt awk '/$25.00/{print}' deals.txt awk '/\$25.00/{print}' deals.txt

Résumé
Ce n’est pas tout avec l’outil de filtrage en ligne de commande awk, les exemples ci-dessus sont les opérations de base de awk. Dans les prochaines parties, nous aborderons comment utiliser les fonctionnalités complexes de awk.
Merci d’avoir lu et pour toute addition ou clarification, veuillez laisser un commentaire dans la section des commentaires.
Source:
https://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/