[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 ).