https://regex101.com/を使用して、文字列内で最初に出現するIPアドレスを返す正規表現を作成しました。
正規表現:
(?:d{1,3}.)+(?:d{1,3})
区切り文字を含む正規表現:
/(?:d{1,3}.)+(?:d{1,3})/
次のテスト文字列を使用:
eu-west 140.243.64.99
次の完全一致を返します:
140.243.64.99
アンカーなどで何を試しても、次のbashスクリプトは生成された正規表現では機能しません。
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
承認された回答:
d
「任意の数字」を言うための非標準的な方法です。私はそれがPerlから来ていると思います、そして他の多くの言語とユーティリティもPerl互換のRE(PCRE)をサポートしています。 (たとえば、DebianストレッチのGNUgrep2.27は同様のw
をサポートします 通常モードでも単語文字の場合。)
Bashはd
をサポートしていません ただし、明示的に[0-9]
を使用する必要があります または[[:digit:]]
。非キャプチャグループ(?:..)
についても同じです 、(..)
だけを使用します 代わりに。
これにより、match
が出力されます。 :
temp="eu-west 140.243.64.99 "
regexp="([0-9]{1,3}.)+([0-9]{1,3})"
[[ $temp =~ $regexp ]] && echo match