をあなたは、POSIX EREパターンを使用しますが、を持っている-E
オプションを渡しませんでしたPOSIX EREフレーバーを使用します。したがって、grep
はPOSIX BREを代わりに使用しました。{n,m}
限定記号と(...)
をエスケープして特別な正規表現演算子として解析する必要があります。
grep
を使用して、パターンの仕事あなたが使用することができます望んでいた方法を作るために:
grep -E '([0-9]{1,3}\.?){4}'
(あなたはそれが唯一のリテラルのドットと一致することができるように.
をエスケープする必要があります。)
参照してください。 online demo。
Aと同じ正規表現のPOSIX BREのバージョン:
grep '\([0-9]\{1,3\}\.\?\)\{4\}'
しかし.
はオプションであるため、この正規表現は、いくつかの数字の文字列にマッチします。あなたは
grep -E '[0-9]{1,3}(\.[0-9]{1,3}){3}'
またはBREバージョンとしてパターンをアンロールすることによってそれを解決することがあります。
grep '[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}'
はanother demoを参照してください。
基本的には一致する:
[0-9]{1,3}
- 任意のASCII数字の1〜3出現
(\.[0-9]{1,3}){3}
- の3出現:
\.
- リテラル.
[0-9]{1,3}
- 1任意のASCII桁の3回の出現
あなたはさらに
実は、あなたがmore precise IP matching regexを使用する場合がありますなど、(\<
/\>
または\b
することができます)単語の境界でそれを微調整することがあります。
そして 'grep -E '([0-9] {1,3} \。?){4}' 'を使用している場合は? POSIX EREパターンを使用しましたが、 '-E'オプションを渡しませんでした。したがって、POSIX BREは 'grep 'によって使用されました。 –
@WiktorStribiżewこれがうまくいった。私はそれを受け入れることができるように答えを詳述するように気をつけますか? – mrbolichi
私はこのコメントに気づいていませんでしたが、実際にこのアップデートで作業していましたが、ここでBRE構文をどのように使用できるかを示しています。 –