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
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:
- j'ai supprimé le
()
inutile de l'expression rationnelle et""
du[[ ... ]]
. - le manuel bash est mal formulé, car il dit que
=~
réussit si la chaîne correspond.