Bash =~正規表現とhttps://regex101.com/

Bash =~正規表現とhttps://regex101.com/

使用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

ベストアンサー1

\d「すべての数字」を言う非標準的な方法です。 Perlから来たようですが、他の多くの言語やユーティリティもPerl互換RE(PCRE)をサポートしています。 (たとえば、Debian StretchのGNU grep 2.27は、通常\wモードでも同様の単語文字をサポートしています。)

ただし、Bashはこれをサポートしていないため、\d明示的に[0-9]orを使用する必要があります[[:digit:]]。キャプチャしないグループの場合も同様です。(?:..)自分で使用してください(..)

次のように印刷する必要がありますmatch

temp="eu-west                       140.243.64.99            "
regexp="([0-9]{1,3}\.)+([0-9]{1,3})"
[[ $temp =~ $regexp ]] && echo match

おすすめ記事