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