Mon entrée est [10/04/16 01:02:03 BST]
.Comment puis-je convertir Apr 10 16 01:02:03
? Et je ne veux pas remplacer /
à -
.
Mon entrée est [10/04/16 01:02:03 BST]
.Comment puis-je convertir Apr 10 16 01:02:03
? Et je ne veux pas remplacer /
à -
.
Réponses:
Utilisation de awk:
$ echo '[10/04/16 01:02:03 BST]' | awk -F'[][/: ]' 'BEGIN{split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m,/ /)} {print m[$3+0],$2,$4,$5":"$6":"$7}'
Apr 10 16 01:02:03
-F'[][/: ]'
Ceci définit le séparateur de champ à l' un des [
, ]
, /
, :
ou blanc.
BEGIN{split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m,/ /)}
Ceci définit un tableau m
contenant les noms de mois
print m[$3+0],$2,$4,$5":"$6":"$7
Ceci affiche la date dans le nouveau format.
S'il y a des barres obliques inverses dans l'entrée, nous pouvons les ignorer en ajoutant la barre oblique inversée à notre liste de séparateurs de champs:
$ echo '\[10\/04\/16 01:02:03 BST\]' | awk -F'[][/: \\\\]+' 'BEGIN{split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m,/ /)} {print m[$3+0],$2,$4,$5":"$6":"$7}'
Apr 10 16 01:02:03
Selon votre version de date
(systèmes basés sur GNU), cela fera l'affaire.
date -jf '[%d/%m/%y %T BST]' '[10/04/16 01:02:03 BST]' +'%b %d %g %T'
Des dates ou heures non valides, telles qu'un jour ou un mois invalide, génèrent une erreur. Donc ça ne marchera pas.
date -jf '[%d/%m/%y %T BST]' '[10/13/16 01:02:03 BST]' +'%b %d %g %T'
Les jours au-delà de la fin du mois se répandent dans le mois suivant, donc cela "se termine" au 02 mars 01:02:03.
date -jf '[%d/%m/%y %T BST]' '[31/02/16 01:02:03 BST]' +'%b %d %g %T'