grep com expressão regular

2

Eu quero corresponder todas as linhas que são do padrão abaixo em um arquivo usando grep .

Abc::xyz() [18-Feb-15 12:09:16]

Eu cheguei abaixo do regex com o grep, mas ele não está retornando a correspondência. Por favor, ajude com o regex correto.

grep -E "^[:alnum:]::[:alnum:]\(\)[:space:]\[.*\]$" <file_name>

Em python, abaixo de regex funciona, mas não é possível usar o mesmo com grep.

^.*::.*\(\) \[.*\]$
    
por g4ur4v 18.04.2015 / 01:16

1 resposta

2

Se você quiser ficar com você, use:

grep -E "^[[:alpha:]]+::[[:alpha:]]+\(\)[[:space:]]\[.*\]$"

Por exemplo:

$ echo "Abc::xyz() [18-Feb-15 12:09:16]" | \
    grep -E "^[[:alpha:]]+::[[:alpha:]]+\(\)[[:space:]]\[.*\]$"

Saída:

Abc::xyz() [18-Feb-15 12:09:16]

Isso pode ser simplificado:

grep -E "^[^:]+::[^(]+\(\) \[[^]]+\]$"

Verifique:

$ echo "Abc::xyz() [18-Feb-15 12:09:16]" | grep -E "^[^:]+::[^(]+\(\) \[[^]]+\]$"
Abc::xyz() [18-Feb-15 12:09:16]
    
por 18.04.2015 / 01:22