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.

  • 🔎 Czym oni są: Wyrażenia regularne, w skrócie regexp lub regex, opisują wzorce tekstowe służące do wyszukiwania i dopasowywania.
  • 🧩 Zestaw podstawowy: Symbole takie jak . ^ $ * i \ służą do zakotwiczenia, powtórzenia i ucieczki znaków we wzorcu.
  • 🔢 Interwał: Nawiasy klamrowe, takie jak {n} i {n,m}, określają, ile razy ma zostać powtórzony poprzedni znak.
  • Rozszerzony: Polecenie grep -E, \+ i \? dopasowuje jedno lub więcej wystąpień oraz zero lub jedno wystąpienie znaku.
  • 🧵 Rozszerzenie aparatu: Nawiasy klamrowe generują wiele ciągów znaków z sekwencji lub listy rozdzielonej przecinkami.
  • 🛠️. Gdzie użyto: Narzędzia takie jak grep, sed, tr i vi wykorzystują wyrażenia regularne do filtrowania tekstu.
  • 🤖 Pomoc AI: Asystenci AI i GitHub Copilot mogą szybko generować, wyjaśniać i debugować wzorce wyrażeń regularnych.

Wyrażenia regularne Linuksa z grep — przykłady wyrażeń regularnych podstawowych, interwałowych i rozszerzonych

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.

przykładowe polecenie cat wyświetlające zawartość istniejącego pliku w terminalu

Następnie wyszukaj zawartość zawierającą literę „a”. Poniższy zrzut ekranu pokazuje, że grep zwraca każdy wiersz zawierający literę „a”.

grep przeszukuje przykładowy plik w poszukiwaniu wierszy zawierających literę a

Daszek „^” wskazuje początek ciągu znaków. Poniższy przykład wyszukuje treści zaczynające się na literę „a”.

grep z kotwicą w kształcie karetki, która dopasowuje tylko wiersze 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.

Przykładowa zawartość pliku pokazana przed filtrowaniem wierszy kończących się literą t

Wybierz tylko te wiersze, które kończą się literą „t”, używając znacznika „$”, jak pokazano poniżej.

grep z kotwicą dolara, wybierając tylko linie kończące się na literę t

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.

grep filtruje przykładowy plik w poszukiwaniu wierszy zawierających znak p

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.

grep -E wyrażenie interwałowe pasujące do znaku p występującego dokładnie dwa razy

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.

grep przeszukuje przykładowy plik pod kątem wszystkich wierszy zawierających znak t

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.

grep rozszerzone wyrażenie pasujące do jednego lub więcej znaków a, po których następuje t

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.

polecenie echo wykorzystujące rozwinięcie nawiasów klamrowych do generowania wielu ciągów z sekwencji i listy

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.

FAQ

Grep domyślnie używa podstawowych wyrażeń regularnych. Egrep włącza wyrażenia rozszerzone (tak samo jak grep -E), a fgrep dopasowuje stałe ciągi znaków bez wyrażeń regularnych (grep -F). Współczesny GNU grep oznacza egrep i fgrep jako przestarzałe, dlatego zaleca się użycie grep -E i grep -F.

Klasy znaków dopasowują kategorię znaków. Wyrażenia nawiasowe, takie jak [az], dopasowują zakres, podczas gdy klasy POSIX, takie jak [[:alpha:]], [[:digit:]] i [[:space:]], dopasowują litery, cyfry i spacje. Dzięki temu wzorce są czytelne i przenośne w różnych lokalizacjach.

Dodaj opcję -i, na przykład grep -i „hello”. To dopasuje zarówno Hello, HELLO, jak i hello. Bez opcji -i wyrażenia regularne rozróżniają wielkość liter, więc wielka litera i jej mała forma są traktowane jako dwa różne znaki.

Symbole wieloznaczne powłoki (globbing) rozszerzają nazwy plików, gdzie * oznacza dowolne znaki, a ? oznacza jeden znak. Wyrażenia regularne dopasowują tekst wewnątrz plików, gdzie * oznacza zero lub więcej poprzedzających znaków. Te same symbole oznaczają różne rzeczy w każdym kontekście.

Użyj opcji -o, na przykład grep -o „a\+t” sample. Zamiast drukować cały wiersz, grep drukuje tylko część pasującą do wzorca, po jednym dopasowaniu na wiersz. Jest to przydatne np.tracwartości takie jak adresy e-mail lub liczby.

Użyj naprzemienności z symbolem potoku. W trybie rozszerzonym polecenie grep -E „cat|dog” sample dopasowuje wiersze zawierające „cat” lub „dog”. W trybie podstawowym należy użyć alternatywy: grep „cat\|dog” sample. Naprzemienność pozwala jednemu poleceniu na jednoczesne wyszukiwanie kilku wzorców.

Asystenci AI potrafią przekształcić prosty opis w działający regex, wyjaśnić działanie zagadkowego wzorca i zasugerować rozwiązania w przypadku niepowodzenia dopasowania. Narzędzia uczenia maszynowego wykrywają również powtarzające się wzorce w dużych plikach dziennika, których ręczne napisanie byłoby żmudne.

Tak. Drugi pilot GitHub Sugeruje polecenia grep i wyrażenia regularne bezpośrednio z komentarza lub częściowego wzorca podczas pisania. Przyspiesza to pisanie złożonych wyrażeń, jednak przed użyciem dowolnego wygenerowanego wzorca należy go przetestować na rzeczywistych danych.

Podsumuj ten post następująco: