GNU/Linux >> Tutoriels Linux >  >> Linux

Correspondance de modèle de script bash

Bash correspondance de modèle glob [0-9] peut être utilisé pour faire correspondre le chiffre :

if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi

Alternativement, vous pouvez utiliser la correspondance de motifs regex avec =~ :

if [[ $var1 =~ .*,123[0-9]{3},.* ]] ; then echo "Pattern matched"; fi

Utiliser une classe de caractères :[0-9] correspond à 0 , 9 , et chaque caractère entre eux dans le jeu de caractères, qui - au moins dans Unicode (par exemple UTF-8) et les jeux de caractères de sous-ensemble (par exemple US-ASCII, Latin-1) - sont les chiffres 1 à 8 . Il correspond donc à l'un des 10 chiffres latins.

if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi

Utilisation de =~ au lieu de == change le type de modèle des modèles "glob" standard du shell en expressions régulières ("regexes" en abrégé). Vous pouvez rendre une regex équivalente un peu plus courte :

if [[ $var1 =~ ,123[0-9]{3}, ]] ; then echo "Pattern matched"; fi

Le premier raccourci vient du fait qu'une expression régulière ne doit correspondre qu'à n'importe quelle partie de la chaîne, pas à l'ensemble. Par conséquent, vous n'avez pas besoin de l'équivalent du * de début et de fin s que vous trouvez dans le motif glob.

La deuxième réduction de longueur est due au {n} syntaxe, qui vous permet de spécifier un nombre exact de répétitions du modèle précédent au lieu de répéter réellement le modèle lui-même dans la regex. (Vous pouvez également faire correspondre n'importe quelle plage de nombres de répétitions en spécifiant un minimum et un maximum, tels que [0-9]{2,4} pour faire correspondre deux, trois ou quatre chiffres d'affilée.)

Il convient de noter que vous pouvez également utiliser une classe de caractères nommée pour faire correspondre les chiffres. Selon votre région, [[:digit:]] peut être exactement équivalent à [0-9] , ou il peut inclure des caractères d'autres scripts avec la propriété Unicode "Number, Decimal Digit".

if [[ $var1 =~ ,123[[:digit:]]{3}, ]] ; then echo "Pattern matched"; fi

Linux
  1. Un script Bash peut-il être accroché à un fichier ?

  2. Typeset -a donne une erreur dans le script ?

  3. Script Bash pour remplir un modèle ?

  4. Comment diviser une chaîne dans un script bash

  5. Exécuter le script bash à partir de l'URL

35 exemples de scripts bash

Comment exécuter un script bash

Comment déboguer un script bash ?

Bash Script - Exemple Hello World

Ajouter un script bash au chemin

Script bash Linux pour extraire l'adresse IP