Samouczek dotyczący wyrażeń regularnych w systemie Linux: przykład wyrażenia regularnego Grep
⚡ Inteligentne podsumowanie
Wyrażenia regularne systemu Linux to specjalne sekwencje znaków, które przeszukują dane i dopasowują złożone wzorce w narzędziach takich jak grep, sed i vi, wykorzystując formy podstawowe, interwałowe, rozszerzone i rozwijane w nawiasach klamrowych, aby precyzyjnie filtrować tekst.
Wyrażenia regularne są jedną z najpotężniejszych funkcji Linux Narzędzia tekstowe, pozwalające dopasowywać, filtrować i przekształcać dane za pomocą zwartych wzorców. Ta strona wyjaśnia formy podstawowe, interwałowe i rozszerzone, a także rozwinięcie nawiasów klamrowych, z przykładami użycia grep.
Co to są wyrażenia regularne w systemie Linux?
Wyrażenia regularne w systemie Linux to znaki specjalne, które pomagają w wyszukiwaniu danych i dopasowywaniu złożonych wzorców. Wyrażenia regularne są skracane do „regexp” lub „regex”. Są używane w wielu programach Linux, takich jak: grep, bash, rename, sed i inne.
Rodzaje wyrażeń regularnych
Dla ułatwienia zrozumienia, omówimy po kolei różne typy wyrażeń regularnych. Ta strona omawia wyrażenia regularne podstawowe, interwałowe i rozszerzone, a kończy się rozwinięciem nawiasów klamrowych.
Podstawowe wyrażenia regularne
Niektóre z powszechnie używanych poleceń, które działają z wyrażeniami regularnymi to tr, sed, vii grep. Poniższa tabela zawiera listę podstawowych wyrażeń regularnych.
| symbol | OPIS |
|---|---|
| . | Zastępuje dowolny znak |
| ^ | Dopasowuje początek ciągu |
| $ | Dopasowuje koniec ciągu |
| * | Dopasowuje zero lub więcej razy poprzedni znak |
| \ | Reprezentuje znaki specjalne |
| () | Grupuje wyrażenia regularne |
| ? | Dopasowuje dokładnie jeden znak |
Spójrzmy na przykład. Najpierw uruchom polecenie cat sample, aby wyświetlić zawartość istniejącego pliku, jak pokazano poniżej.
Następnie wyszukaj zawartość zawierającą literę „a”. Poniższy zrzut ekranu pokazuje, że grep zwraca każdy wiersz zawierający literę „a”.
Daszek „^” wskazuje początek ciągu znaków. Poniższy przykład wyszukuje treści zaczynające się na literę „a”.
Filtrowane są tylko wiersze rozpoczynające się od tego znaku. Wiersze niezawierające znaku „a” na początku są ignorowane.
Przyjrzyjmy się innemu przykładowi. Poniższy zrzut ekranu ponownie pokazuje zawartość przykładowego pliku przed filtrowaniem według końca wiersza.
Wybierz tylko te wiersze, które kończą się literą „t”, używając znacznika „$”, jak pokazano poniżej.
Interwał Wyrażenia regularne
Wyrażenia te określają liczbę wystąpień znaku w ciągu. Są one wymienione poniżej.
| 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 |
Na przykład odfiltruj wszystkie wiersze zawierające znak „p”. Poniższy zrzut ekranu pokazuje pasujące wiersze.
Teraz sprawdź, czy znak „p” pojawia się dokładnie dwa razy w ciągu, jeden po drugim. Składnia jest następująca:
cat sample | grep -E p\{2}
Wynik meczu interwałowego pokazano poniżej.
Uwaga: Do tych wyrażeń regularnych należy dodać -E.
Rozszerzone wyrażenia regularne
Te wyrażenia regularne łączą w sobie więcej niż jedno wyrażenie. Oto niektóre z nich:
| Wyrażenie | OPIS |
|---|---|
| \+ | Dopasowuje jedno lub więcej wystąpień poprzedniego znaku |
| \? | Dopasowuje zero lub jedno wystąpienie poprzedniego znaku |
Na przykład wyszukaj wszystkie wystąpienia znaku „t”. Wynik pokazuje poniższy zrzut ekranu.
Załóżmy, że chcesz odfiltrować wiersze, w których znak „a” poprzedza znak „t”. Możesz użyć polecenia podobnego do poniższego:
cat sample|grep "a\+t"
Wynik pokazano na poniższym zrzucie ekranu.
Rozszerzenie klamry
Składnia rozwinięcia nawiasu klamrowego to sekwencja lub lista elementów rozdzielonych przecinkami w nawiasach klamrowych '{}'. Elementy początkowe i końcowe sekwencji są rozdzielone dwiema kropkami '..'.
Poniżej przedstawiono kilka przykładów.
W powyższych przykładach polecenie echo tworzy ciągi znaków za pomocą rozwinięcia nawiasu klamrowego, generując wiele ciągów znaków z jednego wzorca.











