Comment faire correspondre les chiffres dans les regex
Je suis en train de faire correspondre certaines lignes contre regex qui contient des chiffres.
Bash version 3.2.25:
#!/bin/bash
s="AAA (bbb 123) CCC"
regex="AAA \(bbb \d+\) CCC"
if [[ $s =~ $regex ]]; then
echo $s matches $regex
else
echo $s doesnt match $regex
fi
Résultat:
AAA (bbb 123) CCC doesnt match AAA \(bbb \d+\) CCC
Si j'ai mis regex="AAA \(bbb .+\) CCC"
, il fonctionne, mais il ne répond pas à ma demande pour correspondre à des chiffres.
Pourquoi ne pas \d+
match 123
?
Vous devez vous connecter pour publier un commentaire.
Soit utiliser le jeu de caractères standard ou conforme à POSIX notation:
Comme lu dans Trouver des numéros uniquement au début d'un nom de fichier avec la regex:
donc votre expression doit être l'un de ces:
Tous ensemble, votre script peut être comme ceci:
Nous allons l'exécuter:
Chiffres notation
\d
ne fonctionne pas avec votre bash version. Utilisation[0-9]
à la place:[0-9]+
ne fonctionne pas non plus, mais[0-9]*
n'. Peut-être+
est pas pris en charge?[0-9]+
a fonctionné pour moi sur les anciens BASH 3.2 ainsi donc, je ne sais pas pourquoi Ubuntu BASH est ne pas l'aimer.grep
qui ne gère pas les+
(au moins pas sans options supplémentaires). Je suis confondu parce que mon script à la fois utilise bash expression régulière correspondant à et grep.grep
utilise par défautBRE
donc+
doit être échappé. Sinon, vous pouvez utilisergrep -E
à l'appui prolongé regex comme ci-dessus.