GNU/Linux >> Linux Esercitazione >  >> Linux

Regex caso Unix?

Sto cercando di abbinare lo schema della data usando case comando ma non funziona. Qualcuno può aiutarmi?

Inserimento :01/05/1900 o 5/6/1900

Istruzione del caso utilizzata:

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

Ma il modello utilizzato nell'istruzione case non sta valutando i 2 input di data precedenti.

Risposta accettata:

Prova questo. case comprende solo i glob, quindi la gestione di un'espressione regolare non è semplice. Il =~ operatore offre alcune soluzioni qui però.

#!/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

Se desideri ridurre la dimensione dell'espressione regolare, ^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})$ funziona ugualmente bene.


Linux
  1. Linux:Linux è un Unix?

  2. Array in Unix Bourne Shell?

  3. Trova il numero di riga che contiene il modello utilizzando il delimitatore Regex personalizzato?

  4. Mac Os X Unix?

  5. Schema Regex per modificare il file /etc/sudoers

comando mkdir in Linux/Unix

Linux vs Unix

Comando Grep in Linux/UNIX

comando ls in Linux/UNIX

comando cp in Linux/UNIX

Tutorial Unix Sed:7 esempi di operazioni Sed Hold e Pattern Buffer