GNU/Linux >> Tutoriels Linux >  >> Linux

Expressions régulières dans la commande Grep avec 10 exemples - Partie I

Les expressions régulières sont utilisées pour rechercher et manipuler le texte, en fonction des modèles. La plupart des commandes Linux et des langages de programmation utilisent des expressions régulières.

La commande Grep est utilisée pour rechercher une chaîne spécifique dans un fichier. Veuillez vous référer à notre article précédent pour 15 exemples pratiques de commandes grep.

Vous pouvez également utiliser des expressions régulières avec la commande grep lorsque vous souhaitez rechercher un texte contenant un motif particulier. Les expressions régulières recherchent les modèles sur chaque ligne du fichier. Cela simplifie notre opération de recherche.

Cet article fait partie d'une série de 2 articles.

Cet article de la partie 1 couvre des exemples grep pour des expressions régulières simples. Le futur article de la partie 2 couvrira des exemples avancés d'expressions régulières dans grep.

Prenons le fichier /var/log/messages qui sera utilisé dans nos exemples.

Exemple 1. Début de ligne ( ^ )

Dans la commande grep, le symbole caret ^ correspond à l'expression au début d'une ligne. Dans l'exemple suivant, il affiche toute la ligne qui commence par le 10 novembre. c'est-à-dire tous les messages enregistrés le 10 novembre.

$ grep "^Nov 10" messages.1
Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s
Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Nov 10 01:18:49 gs123 ntpd[2241]: synchronized to 15.1.13.13, stratum 3
Nov 10 13:21:26 gs123 ntpd[2241]: time reset +0.146664 s
Nov 10 13:25:46 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Nov 10 13:26:27 gs123 ntpd[2241]: synchronized to 15.1.13.13, stratum 3

Le ^ correspond à l'expression au début d'une ligne, uniquement s'il s'agit du premier caractère d'une expression régulière. ^N correspond à la ligne commençant par N.

Exemple 2. Fin de ligne ( $)

Le caractère $ correspond à l'expression à la fin d'une ligne. La commande suivante vous aidera à obtenir toutes les lignes qui se terminent par le mot "terminating".

$ grep "terminating.$" messages
Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating.
Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.

À partir de la sortie ci-dessus, vous pouvez savoir quand tout le journal du noyau s'est terminé. Tout comme ^ correspond au début de la ligne uniquement s'il s'agit du premier caractère, $ correspond à la fin de la ligne uniquement s'il s'agit du dernier caractère d'une expression régulière.

Exemple 3. Nombre de lignes vides ( ^$ )

En utilisant les caractères ^ et $, vous pouvez connaître les lignes vides disponibles dans un fichier. "^$" spécifie une ligne vide.

$ grep -c  "^$" messages anaconda.log
messages:0
anaconda.log:3

Les commandes ci-dessus affichent le nombre de lignes vides disponibles dans les messages et les fichiers anaconda.log.

Exemple 4. Caractère unique (.)

Le méta-caractère spécial "." (point) correspond à n'importe quel caractère sauf le caractère de fin de ligne. Prenons le fichier d'entrée dont le contenu est le suivant.

$ cat input
1. first line
2. hi hello
3. hi zello how are you
4. cello
5. aello
6. eello
7. last line

Cherchons maintenant un mot qui a n'importe quel caractère suivi de ello. c'est-à-dire bonjour, violoncelle etc.,

$ grep ".ello" input
2. hi hello
3. hi zello how are you
4. cello
5. aello
6. eello

Si vous souhaitez rechercher un mot qui n'a que 4 caractères, vous pouvez donner grep -w "…." où un seul point représente un seul caractère.

Exemple 5. Zéro ou plusieurs occurrences (*)

Le caractère spécial "*" correspond à zéro ou plusieurs occurrences du caractère précédent. Par exemple, le modèle '1*' correspond à zéro ou à plusieurs '1'.

L'exemple suivant recherche un modèle "kernel :*", c'est-à-dire kernel :et zéro occurrence ou plus du caractère espace.

$ grep "kernel: *." *
messages.4:Jul 12 17:01:02 cloneme kernel: ACPI: PCI interrupt for device 0000:00:11.0 disabled
messages.4:Oct 28 06:29:49 cloneme kernel: ACPI: PM-Timer IO Port: 0x1008
messages.4:Oct 28 06:31:06 btovm871 kernel:  sda: sda1 sda2 sda3
messages.4:Oct 28 06:31:06 btovm871 kernel: sd 0:0:0:0: Attached scsi disk sda
.
.

Dans l'exemple ci-dessus, il correspond au noyau et au symbole deux-points suivi d'un nombre quelconque d'espaces/pas d'espace et "." correspond à n'importe quel caractère unique.

Exemple 6. Une ou plusieurs occurrences (\+)

Le caractère spécial "\+" correspond à une ou plusieurs occurrences du caractère précédent. " \+" correspond à au moins un ou plusieurs caractères d'espacement.

S'il n'y a pas d'espace, cela ne correspondra pas. Le caractère "+" relève de l'expression régulière étendue. Vous devez donc vous échapper lorsque vous souhaitez l'utiliser avec la commande grep.

$ cat input
hi hello
hi    hello how are you
hihello

$ grep "hi \+hello" input
hi hello
hi    hello how are you

Dans l'exemple ci-dessus, le modèle grep correspond au modèle "hi", suivi d'un ou plusieurs caractères d'espacement, suivis de "hello".

S'il n'y a pas d'espace entre salut et bonjour, cela ne correspondra pas. Cependant, le caractère * correspond à zéro occurrence ou plus.

"hihello" sera mis en correspondance avec * comme indiqué ci-dessous.

$ grep "hi *hello" input
hi hello
hi    hello how are you
hihello
$

Exemple 7. Zéro ou une occurrence (\?)

Le caractère spécial "?" correspond à zéro ou une occurrence du caractère précédent. « 0 ? » correspond à zéro simple ou rien.

$ grep "hi \?hello" input
hi hello
hihello

"hi \?hello" correspond à hi et hello avec un seul espace (hi hello) et aucun espace (hihello).

La ligne qui a plus d'un espace entre salut et bonjour n'a pas été mise en correspondance dans la commande ci-dessus.

Exemple 8.Échappement du caractère spécial (\)

Si vous souhaitez rechercher des caractères spéciaux (par exemple :* , point) dans le contenu, vous devez échapper le caractère spécial dans l'expression régulière.

$ grep "127\.0\.0\.1"  /var/log/messages.4
Oct 28 06:31:10 btovm871 ntpd[2241]: Listening on interface lo, 127.0.0.1#123 Enabled

Exemple 9. Classe de caractères ([0-9])

La classe de caractères n'est rien d'autre qu'une liste de caractères mentionnés entre crochets qui est utilisée pour correspondre à un seul caractère parmi plusieurs.

$ grep -B 1 "[0123456789]\+ times" /var/log/messages.4
Oct 28 06:38:35 btovm871 init: open(/dev/pts/0): No such file or directory
Oct 28 06:38:35 btovm871 last message repeated 2 times
Oct 28 06:38:38 btovm871 pcscd: winscard.c:304:SCardConnect() Reader E-Gate 0 0 Not Found
Oct 28 06:38:38 btovm871 last message repeated 3 times

Les messages répétés seront consignés dans le fichier journal des messages en tant que "dernier message répété n fois". L'exemple ci-dessus recherche la ligne qui a n'importe quel nombre (0 à 9) suivi du mot "fois". Si elle correspond, elle affiche la ligne avant la ligne correspondante et la ligne correspondante également.

Avec entre crochets, en utilisant un trait d'union, vous pouvez spécifier la plage de caractères. Comme [0123456789] peut être représenté par [0-9]. La plage des alphabets peut également être spécifiée, telle que [a-z], [A-Z], etc. Ainsi, la commande ci-dessus peut également être écrite comme

$ grep -B 1 "[0-9]\+ times" /var/log/messages.4

Exemple 10. Exception dans la classe de caractères

Si vous souhaitez rechercher tous les caractères sauf ceux entre crochets, utilisez le symbole ^ (Caret) comme premier caractère après le crochet ouvrant. L'exemple suivant recherche une ligne qui ne commence pas par la lettre voyelle du fichier de mots du dictionnaire sous Linux.

$ grep -i  "^[^aeiou]" /usr/share/dict/linux.words
1080
10-point
10th
11-point
12-point
16-point
18-point
1st
2

Le premier signe insertion dans une expression régulière représente le début de la ligne. Cependant, le signe insertion à l'intérieur du crochet représente "sauf" - c'est-à-dire correspondre sauf tout ce qui se trouve entre crochets.


Linux
  1. Commande Linux wc avec exemples

  2. Commande Nohup avec exemples

  3. Commande JQ sous Linux avec exemples

  4. Expressions régulières avancées dans la commande Grep avec 10 exemples - Partie II

  5. Comment utiliser les expressions régulières avec la commande cp sous Linux ?

15 Commande Linux ps avec exemples

Utilisation de la commande GREP sous Linux avec des exemples

Le didacticiel de la commande Grep avec des exemples pour les débutants

Commande d'historique avec exemples

Commande Grep sous Linux (avec exemples)

10 exemples pratiques de regex avec grep