Usando https://regex101.com/ construí una expresión regular para devolver la primera aparición de una dirección IP en una cadena.
expresión regular:
(?:d{1,3}.)+(?:d{1,3})
RegExp incluidos los delimitadores:
/(?:d{1,3}.)+(?:d{1,3})/
Con la siguiente cadena de prueba:
eu-west 140.243.64.99
Devuelve una coincidencia completa de:
140.243.64.99
No importa lo que intente con anclas, etc., el siguiente script bash no funcionará con la expresión regular generada.
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
Respuesta aceptada:
d
es una forma no estándar de decir "cualquier dígito". Creo que proviene de Perl, y muchos otros lenguajes y utilidades también admiten RE compatibles con Perl (PCRE). (y, por ejemplo, GNU grep 2.27 en Debian stretch admite el w
similar para caracteres de palabras incluso en modo normal.)
Bash no es compatible con d
, sin embargo, por lo que debe usar explícitamente [0-9]
o [[:digit:]]
. Lo mismo para el grupo que no captura (?:..)
, use solo (..)
en su lugar.
Esto debería imprimir match
:
temp="eu-west 140.243.64.99 "
regexp="([0-9]{1,3}.)+([0-9]{1,3})"
[[ $temp =~ $regexp ]] && echo match