以下に示すように、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,\}
したがって、対応するフラグを使用または使用して-E
EREを有効にする必要があります。私は後者をお勧めします。バックスラッシュはどこでもとても早く見苦しくなるからだ。