Lze to trochu zjednodušit, awk umí všechno, co potřebuješ.
awk 'BEGIN {FS="[^0-9]"}; {print $3"-"$2"-"$1}'
Proměnná FS obsahuje řetězec, který jednotlivá pole odděluje. Lze použít i regulární výrazy, v tomto případě jsem definoval, že oddělovačem bude jakýkoliv znak, který není číslem.
Pro zajímavost ještě ten sed:
sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3-\2-\1/'
s GNU sed, který je v ubuntu, lze vynechat nějaké ty escape znaky:
sed -r 's/([0-9]*).([0-9]*).([0-9]*)/\3-\2-\1/'