Assumindo data GNU (ou seja, Linux não embutido):
$ LC_TIME=C date --date=2015-12-08 +%d-%b-%Y
08-Dec-2015
Estou passando a data como variável na função. Eu quero converter essa data em formato diferente. Exemplo
DT=2015-12-08
Deseja converter DT
em 08-dec-2015
no Unix.
Assumindo data GNU (ou seja, Linux não embutido):
$ LC_TIME=C date --date=2015-12-08 +%d-%b-%Y
08-Dec-2015
Se você estiver em um Linux não incorporado, ou mais geralmente em um sistema com data GNU, você poderá usá-lo para compor uma data arbitrária.
LC_ALL=C date -d "$DT" +%d-%b-%Y | tr A-Z a-z
Se você não tem data GNU (ou mesmo que você faça isso), você pode fazer isso em shell puro.
case $DT in
*-01-*|*-1-*) month=jan;;
*-02-*|*-2-*) month=feb;;
*-03-*|*-3-*) month=mar;;
*-04-*|*-4-*) month=apr;;
*-05-*|*-5-*) month=may;;
*-06-*|*-6-*) month=jun;;
*-07-*|*-7-*) month=jul;;
*-08-*|*-8-*) month=aug;;
*-09-*|*-9-*) month=sep;;
*-10-*) month=oct;;
*-11-*) month=nov;;
*-12-*) month=dec;;
esac
echo "${DT##*-}-$month-${DT%%-*}"
Tags date shell-script