La expresión regular y grep no funcionan.

La expresión regular y grep no funcionan.

Tengo la siguiente expresión regular:

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

Debería obtener fechas en este formato:

2010-12-19

Y lo estoy usando en nombres de archivos que se ven así:

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

Y, cuando lo uso grepasí:

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

No funciona, solo siento vacío.

Respuesta1

Prueba esto:-

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

Si lo intento aquí, obtengo: -

[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 eso sea lo que estás buscando.

Respuesta2

La respuesta de Andy está bien, pero si quieres algo más parecido a tu sintaxis original, puedes intentar:

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

Necesita egrep aquí para expresiones regulares extendidas y los corchetes dobles para clases de caracteres.

Respuesta3

No necesita los paréntesis, pero sí más corchetes. Las clases de personajes tienen las mismas características que los personajes individuales. Así como podría buscar vocales como esta: [aeiou]o dígitos como este: [0123456789]o esto:, también [0-9]debe incluir una clase como [:digit:]o [:upper:]entre corchetes: [[:xdigit:]](dígitos hexadecimales).

grep -oE "[[:digit:]]{4}-[[:digit:]]{1,2}-[[:digit:]]{1,2}"

información relacionada