Bash shoda vzorů globu [0-9]
lze použít pro shodu s číslicí:
if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi
Případně můžete použít porovnání vzorů regulárních výrazů s =~
:
if [[ $var1 =~ .*,123[0-9]{3},.* ]] ; then echo "Pattern matched"; fi
Použijte třídu znaků:[0-9]
odpovídá 0
, 9
a každý znak mezi nimi ve znakové sadě, což – alespoň v Unicode (např. UTF-8) a podmnožinách znakových sad (např. US-ASCII, Latin-1) – jsou číslice 1
až 8
. Takže odpovídá kterékoli z 10 latinských číslic.
if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi
Pomocí =~
místo ==
změní typ vzoru ze standardních vzorů „glob“ shellu na regulární výrazy (zkráceně „regexes“). Ekvivalentní regulární výraz můžete o něco zkrátit:
if [[ $var1 =~ ,123[0-9]{3}, ]] ; then echo "Pattern matched"; fi
První zkrácení vychází ze skutečnosti, že regulární výraz se musí shodovat pouze s jakoukoli částí řetězce, nikoli s celou věcí. Proto nepotřebujete ekvivalent úvodního a koncového *
s, které najdete ve vzoru glob.
Druhé snížení délky je způsobeno {n}
syntaxe, která vám umožní zadat přesný počet opakování předchozího vzoru namísto skutečného opakování samotného vzoru v regulárním výrazu. (Můžete také odpovídat libovolnému rozsahu počtu opakování zadáním minima a maxima, například [0-9]{2,4}
aby odpovídaly dvěma, třem nebo čtyřem číslicím za sebou.)
Stojí za zmínku, že pro přiřazení číslic můžete použít také pojmenovanou třídu znaků. V závislosti na vašem národním prostředí [[:digit:]]
může být přesně ekvivalentní [0-9]
, nebo může obsahovat znaky z jiných skriptů s vlastností Unicode "Number, Decimal Digit".
if [[ $var1 =~ ,123[[:digit:]]{3}, ]] ; then echo "Pattern matched"; fi