GNU/Linux >> Tutoriels Linux >  >> Linux

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

Dans notre précédent article sur les expressions régulières, partie 1, nous avons passé en revue les expressions régulières de base avec des exemples pratiques.

Mais nous pouvons faire beaucoup plus avec les expressions régulières. Vous pouvez souvent accomplir des tâches complexes avec une seule expression régulière au lieu d'écrire plusieurs lignes de code.

Lors de l'application d'une expression régulière à une chaîne, le moteur d'expression régulière démarre au premier caractère de la chaîne. Il essaiera toutes les permutations possibles de l'expression régulière au niveau du premier caractère. Ce n'est que si toutes les possibilités ont été essayées et qu'elles ont échoué que le moteur de regex continuera avec le deuxième caractère du texte.

La regex essaiera toutes les permutations possibles de la regex, exactement dans le même ordre. Le résultat est que le moteur dirigé par regex renverra la correspondance la plus à gauche.

Dans cet article, passons en revue quelques expressions régulières avancées avec des exemples.

Exemple 1. Opération OU (|)

Le caractère pipe (|) dans grep est utilisé pour spécifier que l'une des deux sous-expressions entières se produit dans une position. « sous-expression1|sous-expression2 » correspond à la sous-expression1 ou à la sous-expression2.

L'exemple suivant supprimera trois différents types de lignes de commentaires dans un fichier en utilisant OR dans une commande grep.

Tout d'abord, créez un exemple de fichier appelé "commentaires".

$ cat comments
This file shows the comment character in various programming/scripting languages
### Perl / shell scripting
If the Line starts with single hash symbol,
then its a comment in Perl and shell scripting.
' VB Scripting comment
The line should start with a single quote to comment in VB scripting.
// C programming single line comment.
Double slashes in the beginning of the line for single line comment in C.

Le fichier appelé "commentaires" contient des lignes de commentaires de programmation perl, VB et C. Maintenant, la commande grep suivante recherche la ligne qui ne commence pas par # ou guillemet simple (') ou double barre oblique (//).

$ grep  -v "^#\|^'\|^\/\/" comments
This file shows the comment character in various programming/scripting languages
If the Line starts with single hash symbol,
then its a comment in Perl and shell scripting.
The line should start with a single quote to comment in VB scripting.
Double slashes in the beginning of the line for single line comment in C.

Exemple 2. Expression de classe de caractères

Comme nous l'avons vu dans notre exemple précédent d'article regex 9, la liste des caractères peut être mentionnée entre crochets pour correspondre à un seul caractère parmi plusieurs. La commande Grep prend en charge certaines classes de caractères spéciales qui désignent certaines plages communes. Peu d'entre eux sont répertoriés ici. Reportez-vous à la page de manuel de grep pour connaître les différentes expressions de classe de caractères.

[:digit:] 	Only the digits 0 to 9
[:alnum:] 	Any alphanumeric character 0 to 9 OR A to Z or a to z.
[:alpha:] 	Any alpha character A to Z or a to z.
[:blank:] 	Space and TAB characters only.

Ils sont toujours utilisés entre crochets sous la forme [[:digit:]]. Maintenant, grepons tous les identifiants de processus du processus démon ntpd en utilisant l'expression de classe de caractères appropriée.

$ grep -e "ntpd\[[[:digit:]]\+\]" /var/log/messages.4
Oct 28 11:42:20 gstuff1 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Oct 28 11:42:20 gstuff1 ntpd[2241]: synchronized to 15.11.13.123, stratum 3
Oct 28 12:33:31 gstuff1 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Oct 28 12:50:46 gstuff1 ntpd[2241]: synchronized to 15.11.13.123, stratum 3
Oct 29 07:55:29 gstuff1 ntpd[2241]: time reset -0.180737 s

Exemple 3. Occurrences M à N ({m,n})

Une expression régulière suivie de {m,n} indique que l'élément précédent correspond au moins m fois, mais pas plus de n fois. Les valeurs de m et n doivent être non négatives et inférieures à 255.

L'exemple suivant imprime la ligne si elle est comprise entre 0 et 99999.

$ cat  number
12
12345
123456
19816282

$ grep  "^[0-9]\{1,5\}$" number
12
12345

Le fichier appelé "numéro" contient la liste des nombres, la commande grep ci-dessus ne correspond qu'au nombre compris entre 1 (le minimum est 0) et 5 chiffres (le maximum est 99999).

Remarque :Pour des exemples de commandes grep de base, lisez 15 exemples pratiques de commandes Grep.

Exemple 4. Occurrence M exacte ({m})

Une expression régulière suivie de {m} correspond exactement à m occurrences de l'expression précédente. La commande grep suivante n'affichera que le nombre à 5 chiffres.

$ grep  "^[0-9]\{5\}$" number
12345

Exemple 5. M occurrences ou plus ({m,})

Une expression régulière suivie de {m,} correspond à m occurrences ou plus de l'expression précédente. La commande grep suivante affichera le nombre qui a 5 chiffres ou plus.

$ grep "[0-9]\{5,\}" number
12345
123456
19816282

Remarque :Saviez-vous que vous pouvez utiliser la commande bzgrep pour rechercher une chaîne ou un motif (expression régulière) sur des fichiers compressés bzip2.

Exemple 6. Limite de mot (\b)

\b doit correspondre à une limite de mot. \b correspond à n'importe quel(s) caractère(s) au début (\bxx) et/ou à la fin (xx\b) d'un mot, donc \bthe\b trouvera le mais pas let, mais \bthe les trouvera.

# grep -i "\bthe\b" comments
This file shows the comment character in various programming/scripting languages
If the Line starts with single hash symbol,
The line should start with a single quote to comment in VB scripting.
Double slashes in the beginning of the line for single line comment in C.

Exemple 7. Références arrière (\n)

Le regroupement des expressions pour une utilisation ultérieure est disponible dans grep via des références arrière. Par exemple, \([0-9]\)\1 correspond à un nombre à deux chiffres dans lequel les deux chiffres sont identiques comme 11,22,33 etc.,

# grep -e '^\(abc\)\1$'
abc
abcabc
abcabc

Dans la commande grep ci-dessus, il accepte l'entrée STDIN. quand il lit l'entrée "abc", il ne correspond pas, la ligne "abcabc" correspond à l'expression donnée donc elle s'imprime. Si vous souhaitez utiliser une expression régulière étendue, il est toujours préférable d'utiliser la commande egrep. grep avec l'option -e fonctionne également comme egrep, mais vous devez échapper les caractères spéciaux comme les parenthèses.

Remarque  :Vous pouvez également utiliser la commande zgrep pour rechercher dans un fichier gz compressé.

Exemple 8. Faites correspondre le modèle "Object Oriented"

Jusqu'à présent, nous avons vu différentes astuces dans la commande grep. Maintenant, en utilisant ces astuces, faisons correspondre "orienté objet" dans différents formats.

$ grep "OO\|\([oO]bject\( \|\-\)[oO]riented\)"

La commande grep ci-dessus correspond à "OO", "orienté objet", "orienté objet" et etc.,

Exemple 9. Imprimer la ligne "voyelle singlecharacter samevowel"

La commande grep suivante imprime toutes les lignes contenant une voyelle (a, e, i, o ou u) suivie d'un seul caractère suivi à nouveau de la même voyelle. Ainsi, il trouvera eve ou adam mais pas vera.

$ cat input
evening
adam
vera

$ grep "\([aeiou]\).\1" input
evening
adam

Exemple 10. Adresse IP valide

La commande grep suivante ne correspond qu'à une adresse IP valide.

$ cat input
15.12.141.121
255.255.255
255.255.255.255
256.125.124.124

$ egrep  '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' input
15.12.141.121
255.255.255.255

Dans l'expression régulière donnée ci-dessus, il existe différentes conditions. Ces correspondances conditionnées doivent se produire trois fois et une classe supplémentaire est mentionnée séparément.

  1. S'il commence par 25, le numéro suivant doit être compris entre 0 et 5 (250 à 255)
  2. S'il commence par 2, le numéro suivant peut être 0-4 suivi de 0-9 (200 à 249)
  3. zéro occurrence de 0 ou 1, 0-9, puis zéro occurrence de tout nombre entre 0-9 (0 à 199)
  4. Puis le caractère point

Pour la 1ère partie de cet article, lisez Expressions régulières dans la commande Grep avec 10 exemples - Partie I


Linux
  1. Commande Linux wc avec exemples

  2. Commande Nohup avec exemples

  3. Commande JQ sous Linux avec exemples

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

  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