Repetição na expressão regular não mostra mais nenhum resultado

0

Eu tenho uma máquina Windows-10, na qual instalei uma plataforma Ubuntu, como pode ser visto no seguinte uname -a result:

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

Eu tenho alguns arquivos que contêm muitas entradas como:

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]

Os tamanhos mencionados variam de 1 a muitos milhões, e estou interessado nos maiores, digamos, aqueles que contêm pelo menos três dígitos.

Eu posso fazer isso usando a seguinte expressão regular:

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

Eu esperava seguir a expressão regular para dar o mesmo resultado:

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

Mas eu não recebo nada.

Acabei de confirmar man grep e esta explicação contém o seguinte:

...
Repetition
...
{n,} The preceding item is matched n or more times.

Então, por que isso não está funcionando?

    
por Dominique 19.01.2018 / 10:02

1 resposta

3

Já que é no Ubuntu, acho que você tem o GNU grep. A página de manual também diz:

grep understands three different versions of regular expression syntax: “basic” (BRE), “extended” (ERE) and “perl” (PCRE). In GNU grep, there is no difference in available functionality between basic and extended syntaxes. In other implementations, basic regular expressions are less powerful. The following description applies to extended regular expressions; differences for basic regular expressions are summarized afterwards.

E então:

Basic vs Extended Regular Expressions
In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \).

Portanto, você precisa usar \{3,\} ou usar o -E para habilitar os EREs. Eu sugiro o último, já que as barras invertidas em todos os lugares ficam feias rapidamente.

    
por 19.01.2018 / 10:18