środa,
Bash: Operator =~
Operator =~
w bashu jest operatorem dopasowania wyrażeń regularnych. Jest on dostępny od wersji Bash 3.0. Używa się go wewnątrz warunków konstrukcji [[ ]]
, aby sprawdzić, czy dany ciąg znaków (string) pasuje do określonego wzorca wyrażenia regularnego.
Podstawowa składnia
if [[ $string =~ $regex ]]; then
echo "Dopasowanie znalezione."
else
echo "Dopasowanie nieznalezione."
fi
$string
to zmienna lub ciąg znaków do przetestowania;$regex
to wyrażenie regularne, do którego jest dopasowywany ciąg znaków.
Przykłady
Sprawdzanie, czy łańcuch znaków zawiera cyfry
if [[ $string =~ [0-9]+ ]]; then
echo "Łańcuch zawiera cyfry."
fi
Poprawność adresu email
regex='^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$'
if [[ $email =~ $regex ]]; then
echo "Poprawny adres email."
else
echo "Niepoprawny adres email."
fi
Ekstrakcja części dopasowania
Po udanym dopasowaniu dopasowane części wyrażenia regularnego są zapisywane do specjalnej zmiennej BASH_REMATCH
. Pierwszy element tej tablicy (BASH_REMATCH[0]
) zawiera całe dopasowanie, a kolejne elementy (BASH_REMATCH[1]
, BASH_REMATCH[2]
, ...) zawierają dopasowania grup w nawiasach ()
.
if [[ $string =~ ([a-zA-Z]+)[0-9]+ ]]; then
echo "Znaleziono literę: ${BASH_REMATCH[1]}"
fi
Uwagi
- W wyrażeniach regularnych używanych z
=~
, dobrą praktyką jest umieszczanie wzorca w cudzysłowie, aby uniknąć problemów z rozwijaniem wzorców przez Bash przed ich użyciem. - W Bashu wersji 3.1 i nowszych w wyrażeniach regularnych nie są wymagane znaki ucieczki dla znaków specjalnych, gdy są one w cudzysłowie.
- Dokładne działanie operatora
=~
i obsługiwane składnie wyrażeń regularnych mogą się różnić w zależności od wersji bash i systemu operacyjnego.