Vodič za regularne izraze u Linuxu: primjer Grep Regex

⚡ Pametni sažetak

Linux regularni izrazi su posebni nizovi znakova koji pretražuju podatke i uspoređuju složene obrasce u alatima kao što su grep, sed i vi, koristeći osnovne, intervalne, proširene i oblike s proširenim zagradama za precizno filtriranje teksta.

  • 🔎 Ono što jesu: Regularni izrazi, skraćeno regexp ili regex, opisuju tekstualne obrasce za pretraživanje i podudaranje.
  • 🧩 Osnovni set: Simboli kao što su . ^ $ * i \ sidre, ponavljaju i izlaze u uzorku.
  • 🔢 Interval: Zagrade poput {n} i {n,m} kontroliraju koliko se puta prethodni znak ponavlja.
  • Prošireno: S grep -E, \+ i \? pronalaze jedno ili više i nula ili jedno pojavljivanje znaka.
  • 🧵 Ekspanzija aparatića za zube: Vitičaste zagrade generiraju više nizova iz niza ili popisa odvojenih zarezima.
  • 🛠️ Gdje se koristi: Alati poput grep, sed, tr i vi oslanjaju se na regularne izraze za filtriranje teksta.
  • 🤖 Pomoć umjetne inteligencije: AI asistenti i GitHub Copilot mogu brzo generirati, objasniti i otkloniti pogreške u regularnim izrazima.

Linux regularni izrazi s grep-om — primjeri osnovnih, intervalnih i proširenih regularnih izraza

Regularni izrazi su jedna od najmoćnijih značajki Linux Alati za tekst koji vam omogućuju usklađivanje, filtriranje i transformaciju podataka s kompaktnim uzorcima. Ova stranica objašnjava osnovne, intervalne i proširene oblike, plus proširenje zagrada, s primjerima obrade grep-a.

Što su Linux regularni izrazi?

Linux regularni izrazi su posebni znakovi koji pomažu u pretraživanju podataka i podudaranju složenih uzoraka. Regularni izrazi se skraćuju kao 'regexp' ili 'regex'. Koriste se u mnogim Linux programima kao što su grep, bash, preimenovanje, sed i još mnogo toga.

Vrste regularnih izraza

Radi lakšeg razumijevanja, naučimo različite vrste regularnih izraza jednu po jednu. Ova stranica pokriva osnovne, intervalne i proširene regularne izraze, a završava s proširenjem zagrada.

Osnovni regularni izrazi

Neke od često korištenih naredbi koje rade s regularnim izrazima su tr, sed, vii grep. Tablica u nastavku navodi neke od osnovnih regularnih izraza.

Simbol Description
. Zamjenjuje bilo koji znak
^ Odgovara početku niza
$ Odgovara kraju niza
* Ne podudara se s prethodnim znakom ili se ne pojavljuje više puta
\ Predstavlja posebne znakove
() Grupira regularne izraze
? Odgovara točno jednom znaku

Pogledajmo primjer. Prvo pokrenite naredbu cat sample za prikaz sadržaja postojeće datoteke, kao što je prikazano dolje.

Primjer naredbe cat koja prikazuje sadržaj postojeće datoteke u terminalu

Zatim potražite sadržaj koji sadrži slovo 'a'. Snimka zaslona u nastavku prikazuje grep koji vraća svaki redak koji sadrži 'a'.

grep pretražuje uzornu datoteku za retke koji sadrže slovo a

Znak '^' odgovara početku niza. Primjer u nastavku traži sadržaj koji počinje slovom 'a'.

grep s karet sidrom koji odgovara samo redovima koji počinju slovom a

Filtriraju se samo retci koji počinju znakom. Retci koji ne sadrže znak 'a' na početku se zanemaruju.

Pogledajmo još jedan primjer. Snimka zaslona u nastavku ponovno prikazuje sadržaj primjera datoteke prije filtriranja po kraju retka.

Primjer sadržaja datoteke prikazan prije filtriranja redaka koji završavaju slovom t

Označite samo one retke koji završavaju slovom 't' pomoću sidra '$', kao što je prikazano dolje.

grep s dolar sidrom odabire samo retke koji završavaju slovom t

Interval Regularni izrazi

Ovi izrazi određuju broj pojavljivanja znaka u nizu. Navedeni su u nastavku.

Izraz Description
{ne} Odgovara prethodnom znaku koji se točno pojavljuje 'n' puta
{n,m} Odgovara prethodnom znaku koji se pojavljuje 'n' puta, ali ne više od m
{n,} Podudara se s prethodnim znakom samo ako se pojavi 'n' puta ili više

Na primjer, filtrirajte sve retke koji sadrže znak 'p'. Snimka zaslona u nastavku prikazuje odgovarajuće retke.

grep filtrira primjer datoteke za retke koji sadrže znak p

Sada provjerite pojavljuje li se znak 'p' točno dva puta u nizu, jedan za drugim. Sintaksa za to je:

cat sample | grep -E p\{2}

Rezultat intervalnog meča prikazan je u nastavku.

grep -E intervalni izraz koji odgovara znaku p koji se pojavljuje točno dva puta

Napomena: ovim regularnim izrazima morate dodati -E.

Prošireni regularni izrazi

Ovi regularni izrazi kombiniraju više od jednog izraza. Neki od njih su:

Izraz Description
\+ Odgovara jednom ili više pojavljivanja prethodnog znaka
\? Odgovara nuli ili jednom pojavljivanju prethodnog znaka

Na primjer, pretražite sva pojavljivanja znaka 't'. Snimka zaslona u nastavku prikazuje rezultat.

grep pretražuje uzorak datoteke za sve retke koji sadrže znak t

Pretpostavimo da želite filtrirati retke u kojima znak 'a' prethodi znaku 't'. Možete koristiti naredbu poput one u nastavku:

cat sample|grep "a\+t"

Izlaz je prikazan na sljedećoj snimci zaslona.

grep prošireni izraz koji odgovara jednom ili više znakova a nakon kojih slijedi t

Proširenje naramenice

Sintaksa za proširenje zagrada je ili niz ili popis stavki odvojenih zarezima unutar vitičastih zagrada '{}'. Početne i završne stavke u nizu odvojene su dvjema točkama '..'.

Neki primjeri prikazani su u nastavku.

Naredba echo koristi proširenje zagrada za generiranje više nizova iz niza i popisa

U gornjim primjerima, naredba echo stvara nizove pomoću proširenja zagradama, proizvodeći više nizova iz jednog uzorka.

Pitanja i odgovori

grep prema zadanim postavkama koristi osnovne regularne izraze. egrep omogućuje proširene izraze (isto kao grep -E), a fgrep pronalazi fiksne nizove bez regexa (grep -F). Moderni GNU grep označava egrep i fgrep kao zastarjele, pa je bolje odabrati grep -E i grep -F.

Klase znakova odgovaraju kategoriji znakova. Izrazi u zagradama poput [az] odgovaraju rasponu, dok POSIX klase poput [[:alpha:]], [[:digit:]] i [[:space:]] odgovaraju slovima, brojevima i razmacima. Omogućuju čitljivost i prenosivost uzoraka na različitim lokacijama.

Dodajte opciju -i, na primjer grep -i "hello". Ovo odgovara Hello, HELLO i hello. Bez -i, regularni izrazi razlikuju velika i mala slova, pa se veliko i malo slovo tretiraju kao dva različita znaka.

Zamjenski znakovi ljuske (globbing) proširuju nazive datoteka, gdje * označava bilo koji znak, a ? označava jedan znak. Regularni izrazi odgovaraju tekstu unutar datoteka, gdje * označava nula ili više prethodnog znaka. Isti simboli imaju različito značenje u svakom kontekstu.

Koristite opciju -o, na primjer grep -o “a\+t” primjer. Umjesto ispisa cijelog retka, grep ispisuje samo dio koji odgovara uzorku, jedno podudaranje po retku. Korisno je za npr.tracvrijednosti poput e-pošte ili brojeva.

Koristite alternaciju sa simbolom okomite crte. U proširenom načinu rada, grep -E “cat|dog” sample pronalazi retke koji sadrže cat ili dog. U osnovnom načinu rada morate ga izbjeći kao grep “cat\|dog” sample. Alternacija omogućuje jednoj naredbi da pretražuje nekoliko uzoraka odjednom.

AI asistenti mogu pretvoriti opis na jednostavnom engleskom jeziku u funkcionalni regularni izraz, objasniti što kriptični uzorak radi i predložiti rješenja kada podudaranje ne uspije. Alati za strojno učenje također otkrivaju ponavljajuće obrasce u velikim datotekama zapisnika koje bi bilo zamorno pisati ručno.

Da. GitHub kopilot Predlaže grep naredbe i regularne izraze izravno iz komentara ili djelomičnog uzorka dok tipkate. Ubrzava pisanje složenih izraza, iako biste trebali testirati bilo koji generirani uzorak u odnosu na stvarne uzorke podataka prije nego što se na njega oslonite.

Sažmite ovu objavu uz: