Estoy tratando de hacer coincidir el patrón de fecha usando case
comando pero no funciona. ¿Alguien puede ayudarme?
Entrada :01/05/1900
o 5/6/1900
Declaración de caso utilizada:
ptn="[0-9]|[0-9][0-9]/[0-9]|[0-9][0-9]/[0-9][0-9]|[0-9][0-9][0-9][0-9]"
case "$dt" in
$ptn ) echo "valid pattern" ;;
*) echo "invalid"
esac
Pero el patrón utilizado en la declaración del caso no está evaluando las 2 entradas de fecha anteriores.
Respuesta aceptada:
Prueba esto. case
solo entiende globs, por lo que manejar una expresión regular no es sencillo. El =~
Sin embargo, el operador ofrece algunas soluciones aquí.
#!/bin/bash
INP="01/05/1900"
ptn="^([0-9]|[0-9][0-9])/([0-9]|[0-9][0-9])/([0-9][0-9]|[0-9][0-9][0-9][0-9])$"
if [[ $INP =~ $ptn ]] ; then
echo valid pattern
else
echo invalid
fi
Si desea reducir el tamaño de la expresión regular, ^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})$
también funciona igual de bien.