Expression régulière dans le Script Bash

Bonjour communauté impressionnante,

Je suis un dope complet quand il s'agit de regex. J'ai mis hors de l'apprentissage.. et maintenant, ma paresse m'a rattrapé.

Ce que j'essaie de faire:
Vérifiez si une chaîne correspond à ce format:

10_06_13

Ie. Date d'aujourd'hui, ou une date similaire avec "2digits_2digits_2digits"

Ce que j'ai fait:

regex='([0-9][0-9][_][0-9][0-9][_][0-9][0-9])'
if [[ "$incoming_string" =~ $regex ]]
then
   # Do awesome stuff here
fi

Cela fonctionne dans une certaine mesure. Mais quand la chaîne entrante est égale à 011_100_131 ... il passe toujours la vérification regex.

Je être reconnaissant si quelqu'un pouvait aider à me diriger dans la bonne direction.
Cheers

24
demandé sur Robbie 2013-06-10 20:02:33

1 réponses

=~ succeeds si la chaîne à gauche contient une correspondance pour l'expression rationnelle à droite. Si vous voulez savoir si la chaîne correspond à la regex, vous devez "ancrer" la regex des deux côtés, comme ceci:

regex='^[0-9][0-9][_][0-9][0-9][_][0-9][0-9]$'
if [[ $incoming_string =~ $regex ]]
then
  # Do awesome stuff here
fi

Le ^ ne réussit qu'au début de la chaîne, et la $ réussit seulement à la fin.

Notes:

  1. j'ai supprimé le () inutile de l'expression rationnelle et "" du [[ ... ]].
  2. le manuel bash est mal formulé, car il dit que =~ réussit si la chaîne correspond.
38
répondu rici 2013-06-10 16:21:25