Eu tenho a seguinte expressão regular:
([:digit:]{4})-([:digit:]{1,2})-([:digit:]{1,2})
Deve obter datas neste formato:
2010-12-19
E estou usando-o em nomes de arquivos parecidos com estes:
2010-12-19-xxx-xxx-xxx.markdown
E, quando eu uso grep
assim:
echo $POST | grep -oE "([:digit:]{4})-([:digit:]{1,2})-([:digit:]{1,2})" # $POST is the filename
Não funciona, só fico vazio.
Responder1
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.
Responder2
A resposta de Andy é boa, mas se você quiser algo mais próximo da sua sintaxe original, tente:
echo $POST | egrep -oE "([[:digit:]]{4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})"
Você precisa do egrep aqui para expressões regulares estendidas e dos colchetes duplos para classes de caracteres.
Responder3
Você não precisa dos parênteses, mas precisa de mais colchetes. As classes de personagens têm as mesmas características dos personagens individuais. Assim como você pode pesquisar vogais como esta: [aeiou]
ou dígitos como este: [0123456789]
ou este: [0-9]
, você também precisa colocar uma classe como [:digit:]
ou [:upper:]
entre colchetes: [[:xdigit:]]
(dígitos hexadecimais).
grep -oE "[[:digit:]]{4}-[[:digit:]]{1,2}-[[:digit:]]{1,2}"