По какой-то причине соответствие всего слова ( \ <... \>
) не работает с моей версией awk , поэтому мне пришлось решить эту проблему с помощью подсказки grep
:
grep '\
Si por ksh
, te refieres a ksh93:
$ t=093500
$ DATEMSK=/dev/stdin <<<%H%M%S printf "%(%F %T)T\n" "$t"
2018-05-17 09:35:00
O:
$ printf '%(%F)T %.8s\n' now "${t//??/\0:}"
2018-05-17 09:35:00
O portablemente (conchas de familias Bourne o csh ofish
)
$ date +"%Y-%m-%d $t" | sed 's/\(..\)\(..\)$/:\1:\2/'
2018-05-17 09:35:00
(para rc -como conchas, use date +'%Y-%m-%d '$t
en lugar de)
He aquí una posible solución. Funciona como tal:
$./format_date.sh 092533
2018-05-17 09:25:33
#!/bin/bash
format_time(){
point=0
while [ "$point" -le "${#1}" ];
do
string=$string"${1:$point:2}"
if [ "$point" -lt "$((${#1}-2))" ]
then
string=$string":"
fi
point=$((point+2))
done
echo "$string"
}
echo "$(date +'%Y-%m-%d')" "$( format_time "$1" )"
Esto aprovecha la sustitución de parámetros, típica de bash
y ksh
, por lo que se adapta a sus etiquetas de pregunta, pero no es adecuado para POSIX /bin/sh
ya que el formulario ${variable:position:offset}
no funciona en POSIX /bin/sh
.