Bash = 〜regexおよびhttps://regex101.com/



Bash Regex Https



解決:

dは、「任意の数字」を言うための非標準的な方法です。それはPerlから来ていると思います、そして他の多くの言語とユーティリティもPerl互換RE(PCRE)をサポートしています。 (たとえば、DebianストレッチのGNU grep2.27は同様のものをサポートしています通常モードでも単語文字の場合は w。)

Bashはサポートしていません dただし、明示的に使用する必要があります[0-9]または[[:桁:]]。非捕獲グループについても同じです(?:..)、(..) 代わりは。



これは印刷する必要がありますマッチ:

temp = 'eu-west 140.243.64.99' regexp = '([0-9] {1,3} 。)+([0-9] {1,3})' [[$ temp =〜$ regexp] ] &&エコーマッチ 

(:...) と dはperlまたはPCRE正規表現演算子です(GNUのように)grep -P)。



bashは、次のような拡張正規表現のみをサポートします。grep -Eただし、正規表現の場合は文字通り次のように渡されます[[text = 〜regexp-here]]引用符で囲まれていない展開の結果とは対照的に([[text =〜$ var]]または[[test =〜$(printf '%s n''regexp-here')]])、POSIX拡張正規表現機能セットに限定されます。

したがって、grep -E ' d'は機能します(GNUEREはすでにperlregexpsからいくつかの拡張機能をインポートしています。 sなので、将来のバージョンには dも)、使用する必要があります:

regexp = ' d' [[$ text =〜$ regexp]]

それが機能するためのbash([[$ text =〜 d]]はしません)。



PCREをサポートするシェルの場合は、次を使用することをお勧めします代わりにzsh:

set -o rematchpcre [[$ text =〜 '(?: d {1,3} 。)+(?: d {1,3})']]

ksh93は、パターンマッチングの一部として、perlのような正規表現(完全には互換性がありません)の独自の実装もサポートしています。そこで、あなたは使用するでしょう:

regexp = '〜(P)(?: d {1,3} 。)+(?: d {1,3})' [[$ text = $ regexp]]

(注意してください=の代わりに=〜。一時変数を使用しないと非常にバグが多いため、一時変数を使用することをお勧めします)