GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unix-Fall-Regex?

Ich versuche, das Datumsmuster mit case abzugleichen Befehl, aber es funktioniert nicht. Kann mir jemand helfen?

Eingabe :01/05/1900 oder 5/6/1900

Verwendete Case-Anweisung:

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

Aber das in der case-Anweisung verwendete Muster wertet die obigen 2 Datumseingaben nicht aus.

Akzeptierte Antwort:

Versuche dies. case versteht nur Globs, daher ist der Umgang mit einem Regexp nicht einfach. Der =~ Der Betreiber bietet hier jedoch einige Lösungen an.

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

Wenn Sie die Größe des regulären Ausdrucks reduzieren möchten, ^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})$ funktioniert auch genauso gut.


Linux
  1. Linux – Ist Linux ein Unix?

  2. Arrays in der Unix-Bourne-Shell?

  3. Ist Mac OS X Unix?

  4. Groß-/Kleinschreibung in glob() unter Linux ignorieren

  5. Ist Linux ein Unix?

mkdir-Befehl unter Linux/Unix

Linux gegen Unix

Grep-Befehl unter Linux/UNIX

ls-Befehl unter Linux/UNIX

cp-Befehl unter Linux/UNIX

Unix Sed Tutorial:7 Beispiele für Sed Hold und Pattern Buffer Operationen