GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser Awk et des expressions régulières pour filtrer du texte ou une chaîne dans des fichiers

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 :

  1. Caractères ordinaires tels que l'espace, le trait de soulignement (_), A-Z, a-z, 0-9.
  2. Méta-caractères qui sont étendus aux caractères ordinaires, ils incluent :
    1. (.) il correspond à n'importe quel caractère unique à l'exception d'un retour à la ligne.
    2. (*) il correspond à zéro ou plusieurs existences du caractère immédiat qui le précède.
    3. [ 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.
    4. ^ il correspond au début d'une ligne dans un fichier.
    5. $ correspond à la fin de ligne dans un fichier.
    6. \ 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

'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'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 :

  1. [0-9] signifie un seul numéro
  2. [a-z] signifie correspondre à une seule lettre minuscule
  3. [A-Z] signifie correspondre à une seule lettre majuscule
  4. [a-zA-Z] signifie correspondre à une seule lettre
  5. [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.


Linux
  1. Comment utiliser la commande Grep pour rechercher du texte dans des fichiers

  2. En quoi les expressions régulières diffèrent-elles des caractères génériques utilisés pour filtrer les fichiers ?

  3. Comment utiliser Netcat pour transférer des fichiers sous Linux

  4. Comment utiliser Logrotate pour gérer les fichiers journaux

  5. Comment fusionner deux fichiers avec AWK ?

Comment trouver des fichiers contenant une chaîne de texte spécifique sous Linux

Comment supprimer des lignes vides dans des fichiers à l'aide de Grep, Sed et Awk

Comment rechercher et remplacer du texte, un mot ou une chaîne dans un fichier

Comment créer et utiliser un fichier d'échange sous Linux

Comment masquer des dossiers et des fichiers sous Linux à l'aide d'un fichier texte

Comment utiliser Sed pour rechercher et remplacer une chaîne dans un fichier