ś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
$stringto zmienna lub ciąg znaków do przetestowania;$regexto 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.