Ciao
benvenuto nel forum e soprattutto nel mondo di
GNU/Linux
Aggiungo qualcosa a quanto scritto da crap0101 che ha postato praticamente la stessa regex che ti avrei passato io
Codice: Seleziona tutto
grep -E "^(0?[1-9]|1[0-9]|2[0-9]|3[0-1])/(0?[1-9]|1[0-2])/[0-9]{4}$"
Nota la potenzialità delle espressioni regolari Estese (grep -E) che sono più leggibili di quelle basic dove devi escapare tutto.
Comunque, a mio modo di vedere ci sono delle limitazioni usando l'una o l'altra espressione così come sono (a parte le date da StarTrek, che in questo forum hanno qualche fan):
L'anno deve avere 4 cifre, non può averne 2
questo si sistema sostituendo il quantificatore {4} con {2,4}. Effetto collaterale: questo fa potenzialmente perdere portabilità allo script che contiene l'espressione
I separatori sono hardcoded: /
questo si potrebbe superare usando invece il metacarattere \W che rappresenta qualsiasi carattere non alfanumerico (non solo spazi,
/ - ma anche per esempio
. | : ; etc): non so se è quello che vuoi
ma soprattutto non c'è nessun controllo su date inesistenti come 29/02/2017 o 31/4/8916
per ovviare a questo potresti verificare la correttezza formale della stringa in quanto data, piuttosto che con una regex, mediante `date -d': se ti interessa ti cerco una discussione qui sul forum dove si parlava di questo e da cui ho tratto un modo che uso appunto per verificare la correttezza dell'inserimento di una data