Utilizzando https://regex101.com/ ho creato un'espressione regolare per restituire la prima occorrenza di un indirizzo IP in una stringa.
RegExp:
(?:d{1,3}.)+(?:d{1,3})
RegExp inclusi i delimitatori:
/(?:d{1,3}.)+(?:d{1,3})/
Con la seguente stringa di prova:
eu-west 140.243.64.99
Restituisce una corrispondenza completa di:
140.243.64.99
Indipendentemente da ciò che provo con le ancore, ecc., il seguente script bash non funzionerà con l'espressione regolare generata.
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
Risposta accettata:
d
è un modo non standard per dire "qualsiasi cifra". Penso che provenga da Perl, e molti altri linguaggi e utilità supportano anche le RE compatibili con Perl (PCRE). (e ad esempio GNU grep 2.27 in Debian stretch supporta il simile w
per i caratteri delle parole anche in modalità normale.)
Bash non supporta d
, però, quindi devi usare esplicitamente [0-9]
o [[:digit:]]
. Lo stesso per il gruppo non di acquisizione (?:..)
, usa solo (..)
invece.
Questo dovrebbe stampare match
:
temp="eu-west 140.243.64.99 "
regexp="([0-9]{1,3}.)+([0-9]{1,3})"
[[ $temp =~ $regexp ]] && echo match