En utilisant https://regex101.com/ j'ai créé une expression régulière pour renvoyer la première occurrence d'une adresse IP dans une chaîne.
RegExp :
(?:d{1,3}.)+(?:d{1,3})
RegExp incluant les délimiteurs :
/(?:d{1,3}.)+(?:d{1,3})/
Avec la chaîne de test suivante :
eu-west 140.243.64.99
Il renvoie une correspondance complète de :
140.243.64.99
Peu importe ce que j'essaie avec les ancres, etc., le script bash suivant ne fonctionnera pas avec l'expression régulière générée.
temp="eu-west 140.243.64.99 "
regexp="(?:d{1,3}.)+(?:d{1,3})"
if [[ $temp =~ $regexp ]]; then
echo "found a match"
else
echo "No IP address returned"
fi
Réponse acceptée :
d
est une façon non standard de dire "n'importe quel chiffre". Je pense que cela vient de Perl, et beaucoup d'autres langages et utilitaires prennent également en charge les RE compatibles Perl (PCRE). (et par exemple, GNU grep 2.27 dans Debian Stretch prend en charge le même w
pour les caractères de mot même en mode normal.)
Bash ne prend pas en charge d
, cependant, vous devez donc utiliser explicitement [0-9]
ou [[:digit:]]
. Idem pour le groupe non capturant (?:..)
, utilisez uniquement (..)
à la place.
Cela devrait imprimer match
:
temp="eu-west 140.243.64.99 "
regexp="([0-9]{1,3}.)+([0-9]{1,3})"
[[ $temp =~ $regexp ]] && echo match