GNU/Linux >> Znalost Linux >  >> Linux

Unix Case Regex?

Snažím se porovnat vzor data pomocí case příkaz, ale nefunguje. Může mi někdo pomoci?

Vstup :01/05/1900 nebo 5/6/1900

Použité vyjádření případu:

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

Ale vzor použitý v příkazu case se nevyhodnocuje pro výše uvedené 2 data.

Přijatá odpověď:

Zkuste to. case rozumí pouze globům, takže manipulace s regulárním výrazem není přímočará. =~ Operátor zde však nabízí některá řešení.

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

Pokud chcete zmenšit velikost regulárního výrazu, ^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})$ funguje stejně dobře.


Linux
  1. Linux – Je Linux Unix?

  2. Pole v Unix Bourne Shell?

  3. Najít číslo řádku, které obsahuje vzor, ​​pomocí vlastního oddělovače regulárního výrazu?

  1. Je Mac Os X Unix?

  2. Vzor regulárního výrazu pro úpravu souboru /etc/sudoers

  3. Je Linux Unix?

  1. Grep Regex:Kompletní průvodce

  2. Služba Linux / UNIX OS:autofs

  3. Ignorujte malá a velká písmena v glob() na Linuxu