Samouczek dotyczący wyrażeń regularnych w systemie Linux: przykład wyrażenia regularnego Grep

Co to są wyrażenia regularne w systemie Linux?

Wyrażenia regularne w Linuksie są znakami specjalnymi, które pomagają wyszukiwać dane i dopasowywać złożone wzorce. Wyrażenia regularne są skracane jako 'regexp' lub 'regex'. Są używane w wielu programach Linux, takich jak grep, bash, rename, sed itp.

Rodzaje wyrażeń regularnych

Dla ułatwienia zrozumienia poznajmy po kolei różne typy wyrażeń regularnych.

Kliknij w tym miejscu jeśli film nie jest dostępny

Podstawowe wyrażenia regularne

Niektóre z powszechnie używanych poleceń z wyrażeniami regularnymi to tr, sed, vi i grep. Poniżej wymienione są niektóre z podstawowych wyrażeń regularnych.

symbol Descriptjony
. zastępuje dowolny znak
^ dopasowuje początek łańcucha
$ dopasowuje koniec łańcucha
* dopasowuje zero lub więcej razy poprzedzający znak
\ Reprezentuj znaki specjalne
() Grupuje wyrażenia regularne
? Pasuje dokładnie do jednego znaku

Zobaczmy przykład.

Wykonaj przykład cat, aby zobaczyć zawartość istniejącego pliku

Podstawowe wyrażenia regularne

Wyszukaj treść zawierającą literę „a”.

Podstawowe wyrażenia regularne

"^' dopasowuje początek łańcucha. Wyszukajmy treści, które ZACZYNAJĄ SIĘ od a

Podstawowe wyrażenia regularne

Filtrowane są tylko linie zaczynające się od znaku. Linie niezawierające na początku znaku „a” są ignorowane.

Spójrzmy na inny przykład –

Podstawowe wyrażenia regularne

Wybierz tylko te linie, które kończą się na t, używając $

Podstawowe wyrażenia regularne

Interwał Wyrażenia regularne

Wyrażenia te mówią nam o liczbie wystąpień znaku w ciągu. Oni są

Wyrażenie OPIS
{nie} Pasuje do poprzedzającego znaku występującego dokładnie n razy
{n, m} Dopasowuje poprzedzający znak występujący n razy, ale nie więcej niż m
{N, } Dopasowuje poprzedzający znak tylko wtedy, gdy pojawia się n lub więcej razy

Przykład:

Odfiltruj wszystkie linie zawierające znak „p”

Interwał Wyrażenia regularne

Chcemy sprawdzić, czy znak „p” pojawia się dokładnie 2 razy w ciągu znaków, jeden po drugim. W tym celu składnia byłaby następująca:

cat sample | grep -E p\{2}

Interwał Wyrażenia regularne

Uwaga: Do tych wyrażeń regularnych należy dodać -E.

Rozszerzone wyrażenia regularne

Te wyrażenia regularne zawierają kombinacje więcej niż jednego wyrażenia. Niektórzy z nich są:

Wyrażenie OPIS
\+ Dopasowuje jedno lub więcej wystąpień poprzedniego znaku
\? Dopasowuje zero lub jedno wystąpienie poprzedniego znaku

Przykład:

Wyszukiwanie wszystkich znaków „t”

Rozszerzone wyrażenia regularne

Załóżmy, że chcemy odfiltrować wiersze, w których znak „a” poprzedza znak „t”

Możemy użyć polecenia takiego jak

cat sample|grep "a\+t"

Rozszerzone wyrażenia regularne

Rozszerzenie klamry

Składnia rozwijania nawiasów to sekwencja lub lista oddzielonych przecinkami elementów umieszczonych w nawiasach klamrowych „{}”. Elementy początkowe i końcowe w sekwencji są oddzielone dwiema kropkami „..”.

Kilka przykładów:

Rozszerzenie klamry

W powyższych przykładach polecenie echo tworzy ciągi znaków przy użyciu rozwinięcia nawiasów.

Podsumowując:

  • Wyrażenia regularne to zestaw znaków używany do sprawdzania wzorców w ciągach
  • Nazywa się je również „regexp” i „regex”.
  • Ważne jest, aby nauczyć się wyrażeń regularnych podczas pisania skryptów
  • Oto kilka podstawowych wyrażeń regularnych:
symbol Descriptjony
. zastępuje dowolny znak
^ dopasowuje początek łańcucha
$ dopasowuje koniec łańcucha
  • Niektóre rozszerzone wyrażenia regularne to:
Wyrażenie OPIS

\+

Dopasowuje jedno lub więcej wystąpień poprzedniego znaku
\? Dopasowuje zero lub jedno wystąpienie poprzedniego znaku
  • Niektóre interwałowe wyrażenia regularne to:
Wyrażenie OPIS
{nie} Pasuje do poprzedzającego znaku występującego dokładnie n razy
{n, m} Dopasowuje poprzedzający znak występujący n razy, ale nie więcej niż m
{N, } Dopasowuje poprzedzający znak tylko wtedy, gdy pojawia się n lub więcej razy
  • Do generowania ciągów znaków używane jest rozwinięcie nawiasów. Pomaga w tworzeniu wielu ciągów z jednego.

Podsumuj ten post następująco: