Expressão regular e grep não funcionam

3

Eu tenho a seguinte expressão regular:

([:digit:]{4})-([:digit:]{1,2})-([:digit:]{1,2})

Ele deve receber datas neste formato:

2010-12-19

E eu estou usando em nomes de arquivos assim:

2010-12-19-xxx-xxx-xxx.markdown

E, quando eu usá-lo com grep assim:

echo $POST | grep -oE "([:digit:]{4})-([:digit:]{1,2})-([:digit:]{1,2})" # $POST is the filename

Não funciona, eu só fico vazio.

    
por Wuffers 20.12.2010 / 01:58

3 respostas

4

Tente isto: -

echo $POST | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"

Se eu tentar aqui, recebo: -

[andys@daedalus ~]$ echo "2010-12-19-aaa-bbb-ccc-ddd.markdown" | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"
2010-12-19

Espero que seja isso que você está procurando.

    
por 20.12.2010 / 02:09
3

A resposta de Andy é boa, mas se você quiser algo mais próximo da sua sintaxe original, você pode tentar:

echo $POST | egrep -oE "([[:digit:]]{4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})"

Você precisa egrep aqui para expressões regulares estendidas e os colchetes duplos para classes de caracteres.

    
por 20.12.2010 / 02:38
3

Você não precisa dos parênteses, mas precisa de mais colchetes. As classes de personagens possuem as mesmas características dos caracteres individuais. Assim como você pode pesquisar por vogais como esta: [aeiou] ou dígitos como este: [0123456789] ou this: [0-9] , é necessário incluir uma classe como [:digit:] ou [:upper:] em uma expressão de colchete : [[:xdigit:]] (dígitos hexadecimais).

grep -oE "[[:digit:]]{4}-[[:digit:]]{1,2}-[[:digit:]]{1,2}"
    
por 20.12.2010 / 03:22

Tags