Ich möchte das unten stehende Datumsformat im Shell-Skript überprüfen
2015-Jul-13
Ich benutze date -d "2015-Jul-13" +"%Y-%b-%d"
aber seinen Fehler als
date: invalid date '2015-Jul-13'
shell-script
date
chhaya vishwakarma
quelle
quelle
date
erkennt nichtYYYY-MMM-DD
. Könnten SieYYYY-MM-DD
oderDD MMM YYYY
stattdessen verwenden?at
und - glaube ich -touch
auch. Ich habe eine Datumsüberprüfungs-Shell-Funktion geschrieben, die auftouch
einmal basiert ... nein, nichttouch
- sie verarbeitet nur Ziffern, sondern analysiert sieat
ziemlich tief ...Antworten:
GNU
date
unterstützt nichtYYYY-MMM-DD
. Es versteht jedochDD-MMM-YYYY
. Wenn Sie also wirklich mit Datumsangaben dieses Formats umgehen müssen, können Sie so etwas tun, indem Sie einfach die Argumente in ein Formatdate
tauschen , das Folgendes erwartet:Hier ist eine All-Shell-Lösung. In den
IFS=-
Anweisungen wird die Shell angewiesen, eine bevorstehende Befehlszeile durch einen Bindestrich-
anstelle von Leerzeichen zu teilen . Dieset $ymd
parst die$ymd
Variable als eine Befehlszeile, aber jetzt durch aufspaltet Bindestrich, Werte für die Parameter zuweisen$1
,$2
et seq . Dasecho "$3-$2-$1"
gibt die drei erfassten Werte einfach in umgekehrter Reihenfolge aus.quelle
ymd=$(IFS=-;set $ymd; echo "$3-$2-$1")
Könnten Sie vielleicht die Magie hinter demset
Befehl enthüllen ?Aus der Manpage: -
Es scheint aber kein
YYYY-MMM-DD
Format zu erkennen . Sie können also entweder von unten oder ähnlich wie folgt vorgehen:ODER Sie müssen es konvertieren / neu formatieren , bevor Sie es an senden
date
!Siehe auch Wie legen Sie ein Format für die bisherige Eingabe fest?
Ich empfehle zu Besuchen: Datumseingabeformate .
von mir betont
Hier können Sie sehen, dass es kein Format wie Jahr-Monat-Tag gibt ! (seit Monaten buchstäblich geschrieben)
quelle
Mit
zsh
könnten Sie dasstrftime
eingebaute (überzsh/datetime
) mit-r
(umgekehrt) verwenden:Das Format verwendet , um die Zeitmessung zu analysieren und die Anzahl der Sekunden seit der Epoche auszugeben:
Dieser Fehler tritt auf, wenn das Datum ungültig ist:
Sie können die Sekunden seit der Epoche auch in ein anderes Standard- / benutzerdefiniertes Datumsformat konvertieren, z
quelle