GNU/Linux >> Tutoriales Linux >  >> Linux

Regex de caso de Unix?

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.


Linux
  1. Linux:¿Linux es un Unix?

  2. Matrices en Unix Bourne Shell?

  3. ¿Encuentra el número de línea que contiene el patrón usando el delimitador Regex personalizado?

  4. Ignorar mayúsculas y minúsculas en glob() en Linux

  5. ¿Linux es un Unix?

Comando mkdir en Linux/Unix

Linux frente a Unix

Comando Grep en Linux/UNIX

Comando ls en Linux/UNIX

comando cp en Linux/UNIX

Tutorial de Unix Sed:7 ejemplos de operaciones Sed Hold y Pattern Buffer