[1-12]\/[0-31]
e [0-99]
não significam 1 a 12, 0 a 31 e 0 a 99.
-
[1-12]
significa um intervalo de caracteres a partir de 1 até 1 e um 2. Em essência: [12]
. (Compare com [0-1a]
.)
-
[0-31]
significa um intervalo de caracteres a partir de 0 até 3 e um 1: [0123]
.
Similarmente para [0-99]
. Expressar um intervalo de números com expressões regulares não é fácil.
Se os números não usarem dois dígitos ( 01/06/33
), você terá que fazer algo como:
[0-9]{1,2}
para o dia e o mês e [0-9]{2}
para o ano, ou o regex rapidamente ficará pesado. Isso, obviamente, arrisca a seleção de algo como 99/99/99
.
Por exemplo:
$ sed "s/^\(muru\/\)[0-9]\{1,2\}\/[0-9]\{1,2\}\/[0-9]\{2\}/1\/14\/46/g" <<<'muru/1/4/85'
muru/11/14/46
$ sed "s/^\(muru\/\)[0-9]\{1,2\}\/[0-9]\{1,2\}\/[0-9]\{2\}/1\/14\/46/g" <<<'muru/10/4/85'
muru/11/14/46
$ sed "s/^\(muru\/\)[0-9]\{1,2\}\/[0-9]\{1,2\}\/[0-9]\{2\}/1\/14\/46/g" <<<'muru/10/28/85'
muru/11/14/46
Suponho que você queira manter o nome, por isso usei referências anteriores para me referir para ele na substituição (o
).