validar test solo regulares regular que probar numeros mayores letras generador expresiones expresion espacios espacio ejemplos blanco alfanumerico regex bash shell scripting

regex - test - Compruebe si una cadena coincide con una expresión regular en el guión Bash



probar expresiones regulares (3)

Uno de los argumentos que recibe mi script es una fecha en el siguiente formato: yyyymmdd .

Quiero verificar si obtengo una fecha válida como entrada.

¿Cómo puedo hacer esto? Estoy tratando de usar una expresión regular como: [0-9]/{/8}


En la versión 3 de bash, puede usar el operador ''= ~'':

if [[ "$date" =~ "[0-9]/{8/}" ]]; then echo "Valid date" else echo "Invalid date" fi

Referencia: http://tldp.org/LDP/abs/html/bashver3.html#REGEXMATCHREF

NOTA: La cita en el operador correspondiente dentro de los corchetes dobles, [[]] ya no es necesaria a partir de la versión 3.2 de Bash.


Puedes decir:

[[ $date =~ ^[0-9]{8}$ ]] && echo "yes"

O más preciso:

[[ $date =~ ^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$ ]] && echo "yes" # |^^^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^^^^^ ^^^^^^ | # | | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ | # | | | | | # | | / | | # | --year-- --month-- --day-- | # | either 01...09 either 01..09 end of line # start of line or 10,11,12 or 10..29 # or 30, 31

Es decir, puede definir una expresión regular en bash que coincida con el formato que desea. De esta manera puedes hacer:

[[ $date =~ ^regex$ ]] && echo "matched" || echo "did not match"

Tenga en cuenta que esto se basa en la solución de Aleks-Daniel Jakimenko en la verificación del formato de fecha de entrada del usuario en bash .

En conchas como sh o fish - less equipped then bash - puedes usar grep :

(echo "$date" | grep -Eq ^regex$) && echo "matched" || echo "did not match"


Una buena forma de probar si una cadena es una fecha correcta es usar la fecha del comando:

if date -d "${DATE}" >/dev/null 2>&1 then # do what you need to do with your date else echo "${DATE} incorrect date" >&2 exit 1 fi