Pomocí https://regex101.com/ jsem vytvořil regulární výraz pro vrácení prvního výskytu IP adresy v řetězci.
RegExp:
(?:d{1,3}.)+(?:d{1,3})
RegExp včetně oddělovačů:
/(?:d{1,3}.)+(?:d{1,3})/
S následujícím testovacím řetězcem:
eu-west 140.243.64.99
Vrátí úplnou shodu:
140.243.64.99
Bez ohledu na to, co zkouším s kotvami atd., následující bash skript nebude fungovat s vygenerovaným regulárním výrazem.
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
Přijatá odpověď:
d
je nestandardní způsob, jak říci „libovolná číslice“. Myslím, že pochází z Perlu a mnoho dalších jazyků a nástrojů podporuje také RE (PCRE) kompatibilní s Perl. (a např. GNU grep 2.27 v Debian stretch podporuje podobné w
pro slovní znaky i v normálním režimu.)
Bash nepodporuje d
, takže musíte explicitně použít [0-9]
nebo [[:digit:]]
. Totéž pro nezachycující skupinu (?:..)
, použijte pouze (..)
místo toho.
Toto by mělo vytisknout match
:
temp="eu-west 140.243.64.99 "
regexp="([0-9]{1,3}.)+([0-9]{1,3})"
[[ $temp =~ $regexp ]] && echo match