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