Unter Verwendung von https://regex101.com/ habe ich einen regulären Ausdruck erstellt, um das erste Vorkommen einer IP-Adresse in einer Zeichenfolge zurückzugeben.
RegExp:
(?:d{1,3}.)+(?:d{1,3})
RegExp einschließlich Trennzeichen:
/(?:d{1,3}.)+(?:d{1,3})/
Mit folgendem Teststring:
eu-west 140.243.64.99
Es gibt eine vollständige Übereinstimmung von:
zurück140.243.64.99
Egal, was ich mit Ankern usw. versuche, das folgende Bash-Skript funktioniert nicht mit dem generierten regulären Ausdruck.
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
Akzeptierte Antwort:
d
ist eine nicht standardmäßige Art, „jede Ziffer“ zu sagen. Ich denke, es stammt von Perl, und viele andere Sprachen und Dienstprogramme unterstützen auch Perl-kompatible REs (PCRE). (und z. B. unterstützt GNU grep 2.27 in Debian Stretch das ähnliche w
für Wortzeichen sogar im normalen Modus.)
Bash unterstützt d
nicht , also müssen Sie explizit [0-9]
verwenden oder [[:digit:]]
. Gleiches gilt für die nicht einfangende Gruppe (?:..)
, verwenden Sie einfach (..)
stattdessen.
Dies sollte match
ausgeben :
temp="eu-west 140.243.64.99 "
regexp="([0-9]{1,3}.)+([0-9]{1,3})"
[[ $temp =~ $regexp ]] && echo match