Je veux valider le format de date ci-dessous dans le script shell
2015-Jul-13
J'utilise date -d "2015-Jul-13" +"%Y-%b-%d"
mais son erreur donne
date: invalid date '2015-Jul-13'
shell-script
date
chhaya vishwakarma
la source
la source
date
ne reconnaît pasYYYY-MMM-DD
. Pourriez-vous utiliserYYYY-MM-DD
ou à laDD MMM YYYY
place?at
, et - je pense -touch
aussi. J'ai écrit une coquille de validation de la date funvtion basée surtouch
une fois ... Non, nontouch
- il ne gère que des chiffres, maisat
fait un peu l' analyse syntaxique assez profonde ...Réponses:
GNU
date
ne prend pas en chargeYYYY-MMM-DD
. Cependant, il comprendDD-MMM-YYYY
. Donc, si vous devez vraiment gérer les dates de ce format, vous pouvez le faire avec quelque chose comme ça, qui permute simplement les arguments autour d'un format quidate
attend:Voici une solution entièrement shell. En le décomposant, les
IFS=-
instructions indiquent au shell de diviser une ligne de commande à venir par un trait d'union-
au lieu d'un espace. Leset $ymd
parse la$ymd
variable comme pour une ligne de commande, mais se divise maintenant par trait d'union, affectant des valeurs aux paramètres$1
,$2
et suivants . Leecho "$3-$2-$1"
sort trivialement les trois valeurs capturées dans l'ordre inverse.la source
ymd=$(IFS=-;set $ymd; echo "$3-$2-$1")
Pourriez-vous peut-être révéler la magie derrière laset
commande?Depuis la page de manuel: -
Mais il ne semble pas reconnaître le
YYYY-MMM-DD
format. Ainsi, vous pouvez utiliser soit par le bas ou similaire comme:OU vous devez le convertir / reformater avant de l'envoyer à
date
!Voir également Comment spécifier un format pour l'entrée à ce jour?
Je recommande de visiter: les formats d'entrée de date .
souligné par moi
Ici, vous pouvez voir qu'il n'y a pas de format comme l' année-mois-jour ! (pendant des mois sont écrits littéralement)
la source
Avec
zsh
vous pouvez utiliser la fonctionstrftime
intégrée (disponible viazsh/datetime
) avec-r
(inverser):qui utilise le format pour analyser l' horodatage et afficher le nombre de secondes depuis l'époque:
Cela entraîne une erreur si la date n'est pas valide:
Vous pouvez également convertir les secondes depuis l'époque en tout autre format de date standard / personnalisé, par exemple
la source