GNU/Linux >> Tutoriels Linux >  >> Linux

Regex de casse Unix ?

J'essaie de faire correspondre le modèle de date en utilisant case commande mais ça ne marche pas. Quelqu'un peut-il m'aider ?

Entrée :01/05/1900 ou 5/6/1900

Instruction de cas utilisée :

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

Mais le modèle utilisé dans l'instruction case n'est pas évalué pour les 2 entrées de date ci-dessus.

Réponse acceptée :

Essaye ça. case ne comprend que les globs, donc la gestion d'une expression rationnelle n'est pas simple. Le =~ L'opérateur propose cependant quelques solutions ici.

#!/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 vous souhaitez réduire la taille de l'expression régulière, ^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})$ fonctionne aussi bien.


Linux
  1. Linux – Linux est-il un Unix ?

  2. Tableaux dans Unix Bourne Shell ?

  3. Trouver le numéro de ligne qui contient le modèle à l'aide du délimiteur Regex personnalisé ?

  4. Mac Os X est-il Unix ?

  5. Service Linux / UNIX OS :autofs

Commande mkdir sous Linux/Unix

Linux contre Unix

Commande Grep sous Linux/UNIX

Commande ls sous Linux/UNIX

commande cp sous Linux/UNIX

Tutoriel Unix Sed :7 exemples d'opérations Sed Hold et Pattern Buffer