正規表現の反復は結果を表示しなくなります。

正規表現の反復は結果を表示しなくなります。

以下に示すように、UbuntuプラットフォームがインストールされているWindows-10システムがありますuname -a

Linux DOMINIQUEDS 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux

多くの項目を含むファイルがあります。たとえば、次のようになります。

18bd6344        mfc110u!CPtrArray        Size:[1046]
18bd63f4        mfc110u!CPtrArray        Size:[1046]
18bd64a4        mfc110u!CPtrArray        Size:[1046]
18bdcef4        mfc110u!CPtrArray        Size:[4]
18bdcfa4        mfc110u!CPtrArray        Size:[8]
18bdd054        mfc110u!CPtrArray        Size:[49]
18bdd104        mfc110u!CPtrArray        Size:[498]
18bdd1b4        mfc110u!CPtrArray        Size:[498]

記載されたサイズは1から数百万までです。私はより大きいサイズ、例えば少なくとも3桁の数字を含むサイズに興味があります。

次の正規表現を使用してこれを実行できます。

grep "Size:\[[0-9][0-9][0-9]" Log1.log // this is working fine

次の正規表現は同じ結果を提供すると予想しています。

grep "Size:\[[0-9]{3,}" Log1.log

しかし、私は何も得られませんでした。

先ほど確認してみるとman grep説明は次のとおりです。

...
繰り返し
...
{n,}前のエントリをn回以上一致します。

では、なぜこれがうまくいかないのですか?

ベストアンサー1

Ubuntuにあるので、GNU grepがあるようです。これマニュアルページまた、次のように言いました。

grepは、正規表現構文の3つの異なるバージョン、「基本」(BRE)、「拡張」(ERE)、および「perl」(PCRE)を理解しています。 GNU grep では、基本構文と拡張構文の間で使用できる機能に違いはありません。他の実装では、基本正規表現はそれほど強力ではありません。 次の説明は拡張正規表現に適用されます。;基本正規表現の違いが要約されています。

それから:

基本正規表現と拡張正規表現
基本正規表現では、メタ文字、、、、および?+特別な意味を失います。代わりに、バックスラッシュバージョン、、、、、およびが{使用されます。|()\?\+\{\|\(\)

\{3,\}したがって、対応するフラグを使用または使用して-EEREを有効にする必要があります。私は後者をお勧めします。バックスラッシュはどこでもとても早く見苦しくなるからだ。

おすすめ記事