Edukativni program o GREP-u i regularnim izrazima. Korištenje regularnih izraza (regex) u Linuxu Tablica regularnih izraza grep

Uslužni program grep je vrlo moćan alat za pretraživanje i filtriranje. tekstualne informacije. Ovaj članak pokazuje nekoliko primjera njegove upotrebe koji će vam omogućiti da cijenite njegove mogućnosti.
Glavna upotreba grep-a je traženje riječi ili fraza u datotekama i izlaznim tokovima. Možete pretraživati ​​upisivanjem upita i područja pretraživanja (fajla) u komandnoj liniji.
Na primjer, da biste pronašli niz "igla" u datoteci hystack.txt, koristite sljedeću naredbu:

$ grep igla haystack.txt

Kao rezultat, grep će prikazati sve pojave igle na koje naiđe u sadržaju datoteke haystack.txt. Važno je napomenuti da u ovom slučaju grep traži skup znakova, a ne riječ. Na primjer, prikazat će se nizovi koji uključuju riječ "nepotrebno" i druge riječi koje sadrže niz "igla".


Da biste rekli grepu da tražite određenu riječ, koristite prekidač -w. Ovaj ključ će ograničiti pretragu samo na navedenu riječ. Riječ je upit omeđen s obje strane razmakom, interpunkcijom ili prijelomima reda.

$ grep -w igla haystack.txt

Nije potrebno ograničiti pretragu na samo jednu datoteku; grep može pretraživati ​​po grupi datoteka, a rezultati pretrage će ukazati na datoteku u kojoj je pronađeno podudaranje. Prekidač -n će također dodati broj linije u kojoj je pronađeno podudaranje, a prekidač -r će vam omogućiti da izvršite rekurzivno pretraživanje. Ovo je vrlo zgodno kada tražite među datotekama sa izvornim kodovima programa.

$ grep -rnw ime_funkcije /home/www/dev/myprogram/

Ime datoteke će biti navedeno prije svakog meča. Ako trebate sakriti nazive datoteka, koristite prekidač -h, naprotiv, ako su vam potrebni samo nazivi datoteka, tada navedite prekidač -l
U sljedećem primjeru, tražit ćemo URL-ove u IRC log datoteci i prikazati zadnjih 10 podudaranja.

$ grep -wo http://.* kanal.log | rep

Opcija -o govori grep-u da ispiše samo podudaranje uzorka umjesto cijele linije. Koristeći pipe, preusmjeravamo izlaz grep na komandu tail, koja po defaultu ispisuje posljednjih 10 redova.
Sada ćemo prebrojati broj poruka koje su pojedini korisnici poslali na irc kanal. Na primjer, sve poruke koje sam slao od kuće i s posla. Razlikuju se po nadimku, kod kuće koristim nadimak user_at_home, a na poslu user_at_work.

$ grep -c "^user_at_(kuća|posao)" channel.log

Sa opcijom -c, grep ispisuje samo broj pronađenih podudaranja, a ne sama podudaranja. Niz za pretragu je stavljen u navodnike jer sadrži posebne znakove koje ljuska može prepoznati kao kontrolne znakove. Imajte na umu da navodnici nisu uključeni u obrazac pretraživanja. Obrnuta kosa crta "" se koristi za izbjegavanje posebnih znakova.
Potražimo poruke od ljudi koji vole da “vrište” na kanalu. Pod „vriskom“ mislimo na poruke napisane plavušastim, VELIKIM slovima. Kako bismo isključili nasumične pogotke skraćenica iz pretraživanja, tražit ćemo riječi od pet ili više znakova:

$ grep -w "+(5,)" kanal.log

Za detaljniji opis, možete se obratiti na stranici za rukovanje grep.
Još nekoliko primjera:

# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin

Prikazuje linije iz /etc/passwd datoteke koje sadrže korijen stringa.

# grep -n root /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 12:operator:x:11:0:operator:/root:/sbin/nologin

Pored toga, prikazuju se brojevi redova koji sadrže traženi red.

# grep -v bash /etc/passwd | grep -v nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown stop:x:7:0:halt:/sbin :/sbin/halt news:x:9:13:news:/var/spool/news: mailnull:x:47:47::/var/spool/mqueue:/dev/null xfs:x:43:43: X Font Server:/etc/X11/fs:/bin/false rpc:x:32:32:Portmapper RPC korisnik:/:/bin/false nscd:x:28:28:NSCD Daemon:/:/bin/false named:x:25:25:Named:/var/named:/bin/false squid:x:23:23::/var/spool/squid:/dev/null ldap:x:55:55:LDAP Korisnik: /var/lib/ldap:/bin/false apache:x:48:48:Apache:/var/www:/bin/false

Provjerava koji korisnici ne koriste bash, isključujući one korisničke račune koji imaju naveden nologin kao ljusku.

# grep -c false /etc/passwd 7

Broji broj naloga koji imaju /bin/false kao ljusku.

# grep -i igre ~/.bash* | grep -v istorija

Ova naredba prikazuje linije iz svih datoteka u matičnom direktoriju trenutni korisnik, čija imena počinju sa ~/.bash, osim onih fajlova čija imena sadrže istoriju stringova, kako bi se isključila podudaranja pronađena u datoteci ~/.bash_history, koja može imati isti red u gornjem ili malom slovu. Imajte na umu da se traži riječ "igre"; umjesto toga možete zamijeniti bilo koju drugu riječ.
grep naredbu i regularne izraze

Za razliku od prethodnog primjera, sada ćemo prikazati samo one redove koji počinju linijom “root”:

# grep ^root /etc/passwd root:x:0:0:root:/root:/bin/bash

Ako želimo vidjeti koji računi uopće nisu koristili shell, tražimo redove koji završavaju znakom ":":

# grep:$ /etc/passwd news:x:9:13:news:/var/spool/news:

Da biste provjerili da li je varijabla PATH u vašoj ~/.bashrc datoteci izvezena, prvo odaberite redove sa "export", a zatim potražite redove koji počinju sa linijom "PATH"; u ovom slučaju, MANPATH i drugi neće biti prikazani mogući načini:

# grep izvoz ~/.bashrc | grep "PATH" export PATH="/bin:/usr/lib/mh:/lib:/usr/bin:/usr/local/bin:/usr/ucb:/usr/dbin:$PATH"

Klase karaktera

Izraz u uglastim zagradama je lista znakova zatvorena unutar znakova [" i "]"". Odgovara bilo kojem pojedinačnom znaku navedenom na ovoj listi; ako je prvi znak liste "^", onda se podudara sa bilo kojim znakom koji NIJE na listi. Na primjer, regularni izraz "" odgovara bilo kojoj pojedinačnoj znamenki.

Unutar izraza u uglastim zagradama možete odrediti raspon koji se sastoji od dva znaka odvojena crticom. Tada izraz odgovara bilo kojem singletonu koji, prema pravilima sortiranja, spada unutar ova dva znaka, uključujući ova dva znaka; ovo uzima u obzir usporedbu i skup znakova specificiranih u lokalizaciji. Na primjer, kada je zadana lokalizacija C, izraz "" je ekvivalentan izrazu "". Postoji mnogo lokaliteta u kojima se sortiranje vrši po redoslijedu rječnika, a na tim lokacijama "" općenito nije ekvivalentno "", u kojem, na primjer, može biti ekvivalentno izrazu "". Da biste koristili tradicionalnu interpretaciju izraza u zagradama, možete koristiti lokalizaciju C tako što ćete postaviti varijablu okruženja LC_ALL na "C".

Konačno, postoje posebno imenovane klase znakova, koje su specificirane unutar izraza u uglastim zagradama. Dodatne informacije Za informacije o ovim unapred definisanim izrazima, pogledajte man stranice ili dokumentaciju grep komande.

# grep /etc/group sys:x:3:root,bin,adm tty:x:5: mail:x:12:mail,postfix ftp:x:50: niko:x:99: floppy:x:19: xfs:x:43: nfsnobody:x:65534: postfix:x:89:

Primjer prikazuje sve redove koji sadrže ili znak "y" ili znak "f".
Univerzalni znakovi (metaznakovi)

Koristite "." da odgovara bilo kojem pojedinačnom znaku. Ako želite popis svih engleskih riječi uzetih iz rječnika koji sadrži pet znakova koji počinju s "c" i završavaju sa "h" (korisno za rješavanje ukrštenih riječi):

# grep " " /usr/share/dict/words catch clash cloth coach couch cough crash crush

Ako želite da prikažete redove koji sadrže znak tačke kao literal, tada navedite opciju -F u komandi grep. simboli "< " и «>" znači prisustvo praznog reda ispred i, shodno tome, nakon navedenih slova. To znači da riječi u datoteci riječi moraju biti napisane u skladu s tim. Ako želite pronaći sve riječi u tekstu prema navedenim obrascima bez uzimanja u obzir praznih redova, izostavite simbole "< " и «>", za preciznije pretraživanje samo riječi, koristite prekidač -w.

Da biste na sličan način pronašli riječi koje mogu imati bilo koji broj znakova između “c” i “h”, koristite zvjezdicu (*). Primjer ispod bira sve riječi koje počinju sa "c" i završavaju sa "h" iz sistemskog rječnika:

# grep " " /usr/share/dict/words kalif gotovina uhvati gazu gepard --izlaz izostavljen--

Ako želite pronaći doslovni znak zvjezdice u datoteci ili izlaznom toku, koristite jednostruki navodnici. Korisnik u donjem primjeru prvo pokušava potražiti "zvjezdicu" u /etc/profile datoteci bez korištenja navodnika, što rezultira time da ništa nije pronađeno. Kada se koriste navodnici, rezultat je izlaz:

# grep * /etc/profile # grep "*" /etc/profile za i u /etc/profile.d/*.sh ; uradi

Da biste u potpunosti obrađivali tekstove u bash skriptama koristeći sed i awk, samo trebate razumjeti regularne izraze. Implementacije ovog najkorisnijeg alata mogu se naći bukvalno svuda, a iako su svi regularni izrazi strukturirani na sličan način i zasnovani su na istim idejama, rad s njima u različitim okruženjima ima određene karakteristike. Ovdje ćemo govoriti o regularnim izrazima koji su pogodni za korištenje u skriptama komandna linija Linux.

Ovaj materijal je zamišljen kao uvod u regularne izraze, namijenjen onima koji možda nisu potpuno svjesni šta su. Dakle, počnimo od samog početka.

Šta su regularni izrazi

Mnogi ljudi, kada prvi put vide regularne izraze, odmah pomisle da gledaju u besmislenu zbrku znakova. Ali ovo je, naravno, daleko od slučaja. Na primjer, pogledajte ovaj regularni izraz


Po našem mišljenju, čak i apsolutni početnik će odmah shvatiti kako to funkcionira i zašto je potrebno :) Ako vam nije jasno, samo čitajte i sve će doći na svoje mjesto.
Regularni izraz je obrazac koji programi poput sed ili awk koriste za filtriranje teksta. Predlošci koriste regularne ASCII znakove koji predstavljaju sami sebe, i takozvane metakaraktere koji igraju posebnu ulogu, na primjer, dozvoljavajući upućivanje na određene grupe znakova.

Vrste regularnih izraza

Implementacije regularnih izraza u različitim okruženjima, na primjer, u programskim jezicima poput Java, Perl i Python, te u Linux alatima kao što su sed, awk i grep, imaju određene karakteristike. Ove karakteristike zavise od takozvanih mehanizama regularnih izraza, koji tumače obrasce.
Linux ima dva mehanizma regularnih izraza:
  • Motor koji podržava standard POSIX Basic Regular Expression (BRE).
  • Motor koji podržava standard POSIX Extended Regular Expression (ERE).
Većina Linux uslužnih programa usklađena je sa barem POSIX BRE standardom, ali neki uslužni programi (uključujući sed) razumiju samo podskup BRE standarda. Jedan od razloga za ovo ograničenje je želja da se takvi uslužni programi učine što bržim u obradi teksta.

POSIX ERE standard se često implementira u programskim jezicima. Omogućava vam korištenje veliki iznos alati za razvoj regularnih izraza. Na primjer, to mogu biti posebni nizovi znakova za često korištene obrasce, kao što je traženje pojedinačnih riječi ili skupova brojeva u tekstu. Awk podržava ERE standard.

Postoji mnogo načina za razvoj regularnih izraza, u zavisnosti kako od mišljenja programera, tako i od karakteristika motora za koji su kreirani. Nije lako napisati univerzalne regularne izraze koje svaki motor može razumjeti. Stoga ćemo se fokusirati na najčešće korištene regularne izraze i pogledati karakteristike njihove implementacije za sed i awk.

POSIX BRE regularni izrazi

Možda je najjednostavniji BRE obrazac regularni izraz za traženje tačnog pojavljivanja niza znakova u tekstu. Ovako izgleda traženje niza u sed i awk:

$ echo "Ovo je test" | sed -n "/test/p" $ echo "Ovo je test" | awk "/test/(ispis $0)"

Pronalaženje teksta po uzorku u sed


Pronalaženje teksta po uzorku u awk

Možda ćete primijetiti da se pretraga zadanog uzorka izvodi bez uzimanja u obzir tačne lokacije teksta u retku. Osim toga, broj pojavljivanja nije bitan. Nakon što regularni izraz pronađe dati tekst bilo gdje u liniji, linija se smatra prikladnom i prosljeđuje se na dalju obradu.

Kada radite s regularnim izrazima, morate uzeti u obzir da su oni osjetljivi na velika i mala slova:

$ echo "Ovo je test" | awk "/Test/(print $0)" $ echo "Ovo je test" | awk "/test/(ispis $0)"

Regularni izrazi razlikuju velika i mala slova

Prvi regularni izraz nije pronašao nijedno podudaranje jer se riječ “test”, koja počinje velikim slovom, ne pojavljuje u tekstu. Drugi, konfiguriran da traži riječ napisanu velikim slovima, pronašao je odgovarajuću liniju u toku.

U regularnim izrazima možete koristiti ne samo slova, već i razmake i brojeve:

$ echo "Ovo je opet test 2" | awk "/test 2/(ispis $0)"

Pronalaženje dijela teksta koji sadrži razmake i brojeve

Razmaci se tretiraju kao regularni znakovi od strane mehanizma regularnih izraza.

Posebni simboli

Koristeći razni likovi U regularnim izrazima morate uzeti u obzir neke karakteristike. Dakle, postoje neki posebni znakovi, odnosno metaznakovi, čija upotreba u šablonu zahtijeva poseban pristup. Evo ih:

.*^${}\+?|()
Ako je jedan od njih potreban u predlošku, morat će se izbjeći pomoću obrnute kose crte (obrnute kose crte) - \ .

Na primjer, ako trebate pronaći znak dolara u tekstu, morate ga uključiti u predložak, kojem prethodi escape znak. Recimo da postoji fajl myfile sa sljedećim tekstom:

U mom džepu je 10$
Znak dolara može se otkriti pomoću ovog uzorka:

$awk "/\$/(print $0)" moj fajl

Korištenje posebnog znaka u uzorku

Osim toga, obrnuta kosa crta je također poseban znak, tako da ako je trebate koristiti u obrascu, morat ćete je također izbaciti. Izgleda kao dvije kose crte koje slijede jedna za drugom:

$ echo "\ je poseban znak" | awk "/\\/(ispis $0)"

Izbjegavanje obrnute kose crte

Iako kosa crta nije uključena u gornju listu specijalnih znakova, pokušaj korištenja u regularnom izrazu napisanom za sed ili awk rezultirat će greškom:

$ echo "3 / 2" | awk "///(print $0)"

Pogrešna upotreba kose crte u obrascu

Ako je potrebno, mora se i izbaciti:

$ echo "3 / 2" | awk "/\//(print $0)"

Izbjegavanje kose crte naprijed

Simboli sidra

Postoje dva posebna znaka za povezivanje uzorka na početak ili kraj tekstualnog niza. Kapica - ^ omogućava vam da opišete nizove znakova koji se nalaze na početku redova teksta. Ako se obrazac koji tražite nalazi negdje drugdje u nizu, regularni izraz neće odgovoriti na njega. Upotreba ovog simbola izgleda ovako:

$ echo "dobrodošli na web lokaciju likegeeks" | awk "/^likegeeks/(print $0)" $ echo "likegeeks web stranica" | awk "/^likegeeks/(print $0)"

Pronalaženje uzorka na početku niza

Znak ^ je dizajniran za traženje uzorka na početku reda, a uzima se u obzir i mala slova znakova. Pogledajmo kako to utiče na obradu tekstualne datoteke:

$awk "/^ovo/(štampaj $0)" moj fajl


Pronalaženje uzorka na početku reda u tekstu iz datoteke

Kada koristite sed, ako stavite kapu negdje unutar uzorka, ona će se tretirati kao bilo koji drugi regularni znak:

$ echo "Ovo ^ je test" | sed -n "/s ^/p"

Poklopac nije na početku uzorka u sed

U awk-u, kada se koristi isti predložak, ovaj znak mora biti izbačen:

$ echo "Ovo ^ je test" | awk "/s\^/(ispis $0)"

Korica nije na početku šablona u awk-u

Shvatili smo pretragu fragmenata teksta koji se nalaze na početku reda. Šta ako trebate pronaći nešto na kraju reda?

U tome će nam pomoći znak dolara - $, koji je sidreni znak za kraj reda:

$ echo "Ovo je test" | awk "/test$/(ispis $0)"

Pronalaženje teksta na kraju reda

Možete koristiti oba simbola sidra u istom predlošku. Obradimo datoteku myfile, čiji je sadržaj prikazan na slici ispod, koristeći sljedeći regularni izraz:

$ awk "/^ovo je test$/(print $0)" myfile


Uzorak koji koristi posebne znakove za početak i završetak reda

Kao što vidite, šablon je odgovorio samo na red koji je u potpunosti odgovarao datom nizu znakova i njihovoj lokaciji.

Evo kako filtrirati prazne redove koristeći sidrene znakove:

$awk "!/^$/(print $0)" moj fajl
U ovom predlošku koristio sam simbol negacije, uskličnik - ! . Korištenje ovog uzorka traži redove koji ne sadrže ništa između početka i kraja reda, i zahvaljujući uzvičnikŠtampaju se samo linije koje ne odgovaraju ovom uzorku.

Simbol tačke

Tačka se koristi za podudaranje bilo kojeg pojedinačnog znaka osim znaka za novi red. Prosledimo datoteku myfile ovom regularnom izrazu, čiji je sadržaj dat u nastavku:

$awk "/.st/(print $0)" moj fajl


Upotreba tačke u regularnim izrazima

Kao što se može vidjeti iz izlaznih podataka, samo prva dva reda iz datoteke odgovaraju uzorku, jer sadrže niz znakova “st” kojem prethodi drugi znak, dok treći red ne sadrži odgovarajući niz, a četvrti ima, ali je na samom početku reda.

Klase karaktera

Tačka odgovara bilo kojem pojedinačnom znaku, ali šta ako želite da budete fleksibilniji u ograničavanju skupa znakova koje tražite? U ovoj situaciji možete koristiti klase znakova.

Zahvaljujući ovom pristupu, možete organizirati pretragu za bilo kojim karakterom iz datog skupa. Za opis klase znakova koriste se uglaste zagrade:

$awk "/th/(print $0)" myfile


Opis klase znakova u regularnom izrazu

Ovdje tražimo niz znakova "th" kojem prethodi znak "o" ili znak "i".

Klase su korisne kada tražite riječi koje mogu početi velikim ili malim slovom:

$ echo "ovo je test" | awk "/njegovo je test/(štampaj $0)" $ echo "Ovo je test" | awk "/njegovo je test/(ispisati $0)"

Potražite riječi koje mogu početi malim ili velikim slovom

Klase znakova nisu ograničene na slova. Ovdje se mogu koristiti i drugi simboli. Nemoguće je unaprijed reći u kojoj će situaciji nastava biti potrebna - sve ovisi o problemu koji se rješava.

Negacija klasa karaktera

Klase znakova se također mogu koristiti za rješavanje inverznog problema opisanog gore. Naime, umjesto traženja simbola uključenih u klasu, možete organizirati pretragu svega što nije uključeno u klasu. Da biste postigli ovo ponašanje regularnog izraza, potrebno je da stavite znak ^ ispred liste karaktera klase. izgleda ovako:

$ awk "/[^oi]th/(print $0)" moj fajl


Pronalaženje likova koji nisu u klasi

U ovom slučaju, naći će se nizovi znakova "th" kojima ne prethodi ni "o" ni "i".

Rasponi znakova

U klasama znakova možete opisati raspon znakova pomoću crtica:

$awk "/st/(print $0)" moj fajl


Opis raspona znakova u klasi znakova

IN u ovom primjeru regularni izraz odgovara na niz znakova "st" kojem prethodi bilo koji znak koji se nalazi u abecedni red, između znakova "e" i "p".

Opsezi se također mogu kreirati iz brojeva:

$ echo "123" | awk "//" $ echo "12a" | awk "//"

Regularni izraz za pronalaženje bilo koja tri broja

Klasa znakova može uključivati ​​nekoliko raspona:

$awk "/st/(print $0)" moj fajl


Klasa znakova koja se sastoji od nekoliko raspona

Ovaj regularni izraz će pronaći sve nizove "st" kojima prethode znakovi iz rasponi a-f i m-z.

Klase posebnih karaktera

BRE ima posebne klase znakova koje možete koristiti kada pišete regularne izraze:
  • [[:alpha:]] - odgovara bilo kojem abecednom znaku, napisanom velikim ili malim slovima.
  • [[:alnum:]] - odgovara bilo kojem alfanumeričkom znaku, odnosno znakovima u rasponima 0-9, A-Z, a-z.
  • [[:blank:]] - odgovara razmaku i znaku tabulatora.
  • [[:cifra:]] - bilo koji znak od 0 do 9.
  • [[:upper:]] - velika abecedna slova - A-Z .
  • [[:lower:]] - mala slova abecede - a-z .
  • [[:print:]] - odgovara bilo kojem znaku za ispis.
  • [[:punct:]] - odgovara znakovima interpunkcije.
  • [[:prostor:]] - razmaka znakova, posebno - razmak, tabulator, znakovi NL, FF, VT, CR.
Možete koristiti posebne klase u predlošcima poput ovog:

$ echo "abc" | awk "/[[:alpha:]]/(print $0)" $ echo "abc" | awk "/[[:digit:]]/(print $0)" $ echo "abc123" | awk "/[[:cifra:]]/(ispis $0)"


Klase specijalnih znakova u regularnim izrazima

Simbol zvijezde

Ako stavite zvjezdicu nakon znaka u obrascu, to će značiti da će regularni izraz funkcionirati ako se znak pojavi u nizu bilo koji broj puta - uključujući situaciju kada je znak odsutan u nizu.

$ echo "test" | awk "/tes*t/(print $0)" $ echo "tessst" | awk "/tes*t/(print $0)"


Upotreba znaka * u regularnim izrazima

Ovaj zamjenski znak se obično koristi za riječi koje su stalno pogrešno napisane ili za riječi koje su podložne različite varijante ispravan pravopis:

$ echo "Volim zelenu boju" | awk "/colou*r/(print $0)" $ echo "Sviđa mi se zelena boja" | awk "/colou*r/(print $0)"

Pronalaženje riječi s različitim pravopisima

U ovom primjeru, isti regularni izraz odgovara i na riječ "boja" i na riječ "boja". To je zbog činjenice da znak "u", iza kojeg slijedi zvjezdica, može ili izostati ili se pojaviti nekoliko puta zaredom.

Još jedna korisna karakteristika koja dolazi od simbola zvjezdice je kombiniranje sa tačkom. Ova kombinacija omogućava regularnom izrazu da odgovori na bilo koji broj bilo kojih znakova:

$ awk "/this.*test/(print $0)" myfile


Predložak koji odgovara na bilo koji broj bilo kojih znakova

U ovom slučaju, nije važno koliko i koji znakovi se nalaze između riječi “ovo” i “test”.

Zvjezdica se također može koristiti sa klasama znakova:

$ echo "st" | awk "/s*t/(print $0)" $ echo "sat" | awk "/s*t/(print $0)" $ echo "set" | awk "/s*t/(ispis $0)"


Korištenje zvjezdice s klasama znakova

U sva tri primjera regularni izraz funkcionira jer zvjezdica iza klase znakova znači da ako se pronađe bilo koji broj znakova "a" ili "e", ili ako nijedan nije pronađen, niz će odgovarati datom uzorku.

POSIX ERE regularni izrazi

POSIX ERE predlošci koje podržavaju neki Linux uslužni programi mogu sadržavati dodatne znakove. Kao što je već spomenuto, awk podržava ovaj standard, ali sed ne.

Ovdje ćemo pogledati najčešće korištene simbole u ERE obrascima, koji će vam biti korisni kada kreirate vlastite regularne izraze.

▍Upitnik

Znak pitanja označava da se prethodni znak može pojaviti jednom ili uopće ne pojaviti u tekstu. Ovaj lik je jedan od metakaraktera koji se ponavljaju. Evo nekoliko primjera:

$ echo "tet" | awk "/tes?t/(print $0)" $ echo "test" | awk "/tes?t/(print $0)" $ echo "testst" | awk "/tes?t/(print $0)"


Upitnik u regularnim izrazima

Kao što vidite, u trećem slučaju slovo “s” se pojavljuje dva puta, tako da regularni izraz ne odgovara na riječ “testst”.

Znak pitanja se također može koristiti sa klasama znakova:

$ echo "tst" | awk "/t?st/(print $0)" $ echo "test" | awk "/t?st/(print $0)" $ echo "tast" | awk "/t?st/(print $0)" $ echo "taest" | awk "/t?st/(print $0)" $ echo "test" | awk "/t?st/(print $0)"


Znak pitanja i klase znakova

Ako u redu nema znakova iz klase, ili se jedan od njih pojavi jednom, regularni izraz radi, ali čim se dva znaka pojave u riječi, sistem više ne nalazi podudaranje za obrazac u tekstu.

▍ Simbol plus

Znak plus u obrascu označava da će regularni izraz odgovarati onome što traži ako se prethodni znak pojavi jednom ili više puta u tekstu. Međutim, ova konstrukcija neće reagirati na odsustvo simbola:

$ echo "test" | awk "/te+st/(print $0)" $ echo "teest" | awk "/te+st/(print $0)" $ echo "tst" | awk "/te+st/(print $0)"


Simbol plus u regularnim izrazima

U ovom primjeru, ako u riječi nema znaka "e", mehanizam regularnih izraza neće pronaći podudaranja sa uzorkom u tekstu. Simbol plus također radi s klasama znakova - na ovaj način je sličan zvjezdici i upitniku:

$ echo "tst" | awk "/t+st/(print $0)" $ echo "test" | awk "/t+st/(print $0)" $ echo "test" | awk "/t+st/(print $0)" $ echo "teeast" | awk "/t+st/(ispis $0)"


Plus klase znakova i znakova

U ovom slučaju, ako linija sadrži bilo koji znak iz klase, smatrat će se da tekst odgovara uzorku.

▍Vitičaste zagrade

Vitičaste zagrade, koje se mogu koristiti u ERE obrascima, slične su simbolima o kojima smo gore govorili, ali vam omogućavaju da preciznije odredite potreban broj pojavljivanja simbola koji im prethodi. Možete odrediti ograničenje u dva formata:
  • n - broj koji specificira tačan broj traženih pojavljivanja
  • n, m su dva broja koja se tumače na sljedeći način: "najmanje n puta, ali ne više od m."
Evo primjera prve opcije:

$ echo "tst" | awk "/te(1)st/(print $0)" $ echo "test" | awk "/te(1)st/(print $0)"

Kovrčave zagrade u obrascima, tražeći tačan broj pojavljivanja

U starijim verzijama awk-a morali ste da koristite opciju komandne linije --re-interval da bi program prepoznao intervale u regularnim izrazima, ali u novijim verzijama to nije neophodno.

$ echo "tst" | awk "/te(1,2)st/(print $0)" $ echo "test" | awk "/te(1,2)st/(print $0)" $ echo "teest" | awk "/te(1,2)st/(print $0)" $ echo "teeest" | awk "/te(1,2)st/(print $0)"


Razmak naveden u vitičastim zagradama

U ovom primjeru, znak “e” se mora pojaviti 1 ili 2 puta u redu, tada će regularni izraz odgovoriti na tekst.

Vitičaste zagrade se također mogu koristiti sa klasama znakova. Ovdje vrijede principi koje već poznajete:

$ echo "tst" | awk "/t(1,2)st/(print $0)" $ echo "test" | awk "/t(1,2)st/(print $0)" $ echo "test" | awk "/t(1,2)st/(print $0)" $ echo "teeast" | awk "/t(1,2)st/(print $0)"


Vitičaste zagrade i klase znakova

Šablon će reagirati na tekst ako sadrži znak “a” ili znak “e” jednom ili dvaput.

▍Logički simbol „ili“.

Simbol | - vertikalna traka znači logičko „ili“ u regularnim izrazima. Prilikom obrade regularnog izraza koji sadrži nekoliko fragmenata razdvojenih takvim znakom, mašina će analizirani tekst smatrati prikladnim ako se podudara s bilo kojim od fragmenata. Evo primjera:

$ echo "Ovo je test" | awk "/test|ispit/(print $0)" $ echo "Ovo je ispit" | awk "/test|ispit/(print $0)" $ echo "Ovo je nešto drugo" | awk "/test|ispit/(ispis $0)"


Logično "ili" u regularnim izrazima

U ovom primjeru, regularni izraz je konfiguriran da traži u tekstu riječi “test” ili “ispit”. Imajte na umu da između fragmenata predloška i simbola koji ih razdvaja | ne bi trebalo biti razmaka.

Fragmenti regularnog izraza mogu se grupirati pomoću zagrada. Ako grupišete određeni niz znakova, sistem će ga percipirati kao običan karakter. To jest, na primjer, metaznakovi ponavljanja se mogu primijeniti na njega. Ovako to izgleda:

$ echo "Sviđa mi se" | awk "/Like(Geeks)?/(print $0)" $ echo "LikeGeeks" | awk "/Like(Geeks)?/(print $0)"


Grupiranje fragmenata regularnog izraza

U ovim primjerima, riječ "Štreberci" je zatvorena u zagradi, praćena znakom pitanja. Podsjetimo da znak pitanja znači “0 ili 1 ponavljanje”, tako da će regularni izraz odgovoriti i na string “Like” i na string “LikeGeeks”.

Praktični primjeri

Sada kada smo pokrili osnove regularnih izraza, vrijeme je da uradimo nešto korisno s njima.

▍Prebrojavanje broja fajlova

Hajde da napišemo bash skriptu koja broji fajlove koji se nalaze u direktorijumima koji su upisani u varijablu okruženje PATH. Da biste to učinili, prvo ćete morati generirati listu putanja direktorija. Uradimo to koristeći sed, zamjenjujući dvotočke razmacima:

$ echo $PATH | sed "s/:/ /g"
Komanda zamjene podržava regularne izraze kao obrasce za pretraživanje teksta. U ovom slučaju sve je krajnje jednostavno, tražimo simbol dvotočka, ali niko nam ne smeta da ovdje koristimo nešto drugo - sve ovisi o konkretnom zadatku.
Sada morate proći kroz rezultirajuću listu u petlji i izvršiti radnje potrebne za prebrojavanje broja datoteka. Opšti pregled skripte će biti ovakav:

Mypath=$(echo $PATH | sed "s/:/ /g") za direktorij u $mypath je gotovo
Sada napišimo cijeli tekst skripte, koristeći naredbu ls da dobijemo informacije o broju datoteka u svakom direktoriju:

#!/bin/bash mypath=$(echo $PATH | sed "s/:/ /g") count=0 za direktorij u $mypath do check=$(ls $directory) za stavku u $check do count=$ [ $count + 1 ] done echo "$directory - $count" count=0 urađeno
Prilikom pokretanja skripte može se ispostaviti da neki direktoriji iz PATH ne postoje, međutim, to ga neće spriječiti da broji datoteke u postojećim direktorijima.


Brojanje fajlova

Glavna vrijednost ovog primjera je da koristeći isti pristup možete riješiti mnogo složenije probleme. Koje tačno zavisi od vaših potreba.

▍Provjera adresa e-pošte

Postoje web stranice sa ogromnim kolekcijama regularnih izraza koji vam omogućavaju da provjerite adrese Email, brojevi telefona, i tako dalje. Međutim, jedno je uzeti nešto gotovo, a sasvim drugo napraviti nešto sami. Pa hajde da napišemo regularni izraz za provjeru email adresa. Počnimo s analizom izvornih podataka. Evo, na primjer, određene adrese:

[email protected]
Korisničko ime, korisničko ime, može se sastojati od alfanumeričkih i nekih drugih znakova. Naime, ovo je tačka, crtica, donja crta, znak plus. Nakon korisničkog imena slijedi znak @.

Naoružani ovim znanjem, krenimo sa sklapanjem regularnog izraza s njegove lijeve strane, koji se koristi za provjeru korisničkog imena. Evo šta smo dobili:

^(+)@
Ovaj regularni izraz može se pročitati na sljedeći način: "Red mora početi s najmanje jednim znakom iz grupe koja je navedena u uglastim zagradama, nakon čega slijedi znak @."

Sada - red za ime hosta - ime hosta. Ovdje vrijede ista pravila kao i za korisničko ime, pa će predložak za njega izgledati ovako:

(+)
Naziv domene najvišeg nivoa podliježe posebna pravila. Mogu postojati samo abecedni znakovi, kojih mora biti najmanje dva (na primjer, takvi domeni obično sadrže kod zemlje), a ne više od pet. Sve to znači da će šablon za provjeru posljednjeg dijela adrese biti ovakav:

\.({2,5})$
Možete to pročitati ovako: "Prvo mora biti tačka, zatim 2 do 5 abecednih znakova, a nakon toga se red završava."

Nakon što smo pripremili šablone za pojedinačne delove regularnog izraza, hajde da ih sastavimo:

^(+)@(+)\.({2,5})$
Sada ostaje samo da testiramo šta se desilo:

$ echo " [email protected]" | awk "/^(+)@(+)\.((2,5))$/(print $0)" $ echo " [email protected]" | awk "/^(+)@(+)\.((2,5))$/(print $0)"


Provjera valjanosti adrese e-pošte pomoću regularnih izraza

Činjenica da je tekst prosleđen awk-u prikazan na ekranu znači da ga je sistem prepoznao kao adresu e-pošte.

Rezultati

Ako vam je regularni izraz za provjeru email adresa na koji ste naišli na samom početku članka tada izgledao potpuno nerazumljiv, nadamo se da sada više ne izgleda kao besmislen skup znakova. Ako je to zaista tako, znači ovog materijala ispunio svoju svrhu. Zapravo, regularni izrazi su tema koju možete proučavati cijeli život, ali čak i ono malo što smo pokrili već vam može pomoći da napišete skripte koje obrađuju tekstove prilično napredno.

U ovoj seriji materijala obično smo pokazali vrlo jednostavni primjeri bash skripte koje su se sastojale doslovno od nekoliko redaka. Sljedeći put ćemo pogledati nešto veće.

Dragi čitaoci! Koristite li regularne izraze kada obrađujete tekst u skriptama komandne linije?

Jedan od najkorisnijih i najbogatijih timova u Linux terminal– “grep” komanda. Grep je akronim koji je skraćenica za “global regular expression print” (odnosno, “tražite svuda nizove koji odgovaraju regularnom izrazu i odštampajte ih”). To znači da se grep može koristiti da se vidi da li se unos podudara sa navedenim obrascima.

Ovaj naizgled trivijalan program je veoma moćan kada se koristi pravilno. Njegova sposobnost sortiranja unosa na osnovu složenih pravila čini ga popularnom karikom u mnogim lancima komandi.

Ovaj vodič razmatra neke od mogućnosti naredbe grep, a zatim prelazi na korištenje regularnih izraza. Sve opisano u ovaj priručnik tehnike se mogu primijeniti u upravljanju virtuelnim serverom.

Osnove upotrebe

U svom najjednostavnijem obliku, grep se koristi za pronalaženje podudaranja uzoraka slova u tekstualnoj datoteci. To znači da ako grep dobije riječ za pretraživanje, ispisat će svaki red u datoteci koji sadrži tu riječ.

Kao primjer, možete koristiti grep da pronađete redove koji sadrže riječ "GNU" u verziji 3 GNU Opće javne licence na Ubuntu sistemu.

cd /usr/share/common-licenses
grep "GNU" GPL-3
GNU OPĆA JAVNA LICENCA





13. Koristite s GNU Affero Općom javnom licencom.
pod verzijom 3 GNU Affero Opće javne licence u singl
...
...

Prvi argument, "GNU", je obrazac za traženje, a drugi argument, "GPL-3", je ulazna datoteka koju treba pronaći.

Kao rezultat, svi redovi koji sadrže tekstualni uzorak bit će ispisani. U nekim Linux distribucije obrazac koji tražite bit će istaknut u izlaznim linijama.

Opšte opcije

Podrazumevano, naredba grep jednostavno traži strogo određene obrasce u ulaznoj datoteci i ispisuje linije koje pronađe. Međutim, ponašanje grepa se može promijeniti dodavanjem nekih dodatnih zastavica.

Ako trebate zanemariti velika i mala slova parametra pretraživanja i tražiti varijacije obrasca i velikim i malim slovima, možete koristiti uslužne programe "-i" ili "--ignore-case".

Kao primjer, možete koristiti grep da pretražite istu datoteku za riječ "licenca" napisanu velikim, malim ili mješovitim slovima.

grep -i "licenca" GPL-3
GNU OPĆA JAVNA LICENCA
ovog licencnog dokumenta, ali nije dozvoljena njegova promjena.
GNU Opšta javna licenca je besplatna licenca bez autorskih prava za
Osmišljene su licence za većinu softvera i drugih praktičnih radova
GNU Opšta javna licenca ima za cilj da garantuje vašu slobodu da
GNU Opšta javna licenca za većinu našeg softvera; odnosi se i na


"Ova licenca" se odnosi na verziju 3 GNU Opće javne licence.
"Program" se odnosi na bilo koje djelo zaštićeno autorskim pravima licencirano pod ovim
...
...

Kao što vidite, izlaz sadrži "LICENSE", "licencu" i "License". Ako postoji instanca "LiCeNsE" u datoteci, ona bi također bila ispisana.
Ako trebate pronaći sve linije koje ne sadrže navedeni uzorak, možete koristiti zastavice "-v" ili "--invert-match".

Kao primjer, možete koristiti sljedeću naredbu za pretraživanje BSD licence za sve redove koji ne sadrže riječ "the":

grep -v "the" BSD
Sva prava zadržana.
Redistribucija i upotreba u izvornom i binarnom obliku, sa ili bez
su ispunjeni:
može se koristiti za odobravanje ili promociju proizvoda izvedenih iz ovog softvera
bez posebne prethodne pismene dozvole.
OVAJ SOFTVER JE OBEZBEĐEN OD REGENTA I DOPRINOSNIKA ``KAKO JESTE"" I
BILO KAKVE IZRIČITE ILI PODRAZUMEVANE GARANCIJE, UKLJUČUJUĆI, ALI NE OGRANIČENO NA,
...
...

Kao što možete vidjeti, zadnja dva reda su izašla kao da ne sadrže riječ "the" jer naredba "ignore case" nije korištena.

Uvijek je korisno znati brojeve redova u kojima su pronađena podudaranja. Mogu se pronaći pomoću oznaka "-n" ili "--line-number".

Ako primijenite ovu zastavicu u prethodnom primjeru, prikazat će se sljedeći rezultat:

grep -vn "the" BSD
2: Sva prava zadržana.
3:
4: Redistribucija i upotreba u izvornom i binarnom obliku, sa ili bez
6:su ispunjeni:
13: može se koristiti za odobravanje ili promociju proizvoda izvedenih iz ovog softvera
14: bez posebne prethodne pismene dozvole.
15:
16: OVAJ SOFTVER JE OBEZBEĐEN OD REGENTA I DOPRINOSNIKA ``KAKO JESTE"" I
17: BILO KAKVE IZRIČITE ILI PODRAZUMEVANE GARANCIJE, UKLJUČUJUĆI, ALI NE OGRANIČENO NA,
...
...

Sada se možete pozvati na broj reda kada trebate napraviti promjene na svakom redu koji ne sadrži "the".

Regularni izrazi

Kao što je spomenuto u uvodu, grep je skraćenica za “globalni ispis regularnog izraza”. Regularni izraz je tekstualni niz koji opisuje određeni obrazac pretraživanja.

Različite aplikacije i programski jezici koriste regularne izraze malo drugačije. Ovaj vodič pokriva samo mali podskup načina za opisivanje obrazaca za Grep.

Poklapanja u pismu

U gornjim primjerima traženja riječi "GNU" i "the", traženi su vrlo jednostavni regularni izrazi koji se tačno poklapaju sa nizom znakova "GNU" i "the".

Ispravnije je o njima razmišljati kao o podudaranju nizova znakova, a ne kao o podudaranjima riječi. Kada se upoznate sa složenijim obrascima, ova razlika će postati značajnija.

Obrasci koji se tačno poklapaju sa datim znakovima nazivaju se "slovnim" uzorcima jer odgovaraju uzorku slovo po slovo, znak po karakter.

Svi abecedni i numerički znakovi (i neki drugi znakovi) se doslovno podudaraju osim ako nisu izmijenjeni drugim mehanizmima izražavanja.

Anchor matches

Sidra su posebni znakovi koji označavaju lokaciju u nizu željenog podudaranja.

Na primjer, možete odrediti da su za pretragu potrebni samo redovi koji sadrže riječ “GNU” na samom početku. Da biste to učinili, trebate koristiti sidro “^” prije niza slova.

Ovaj primjer ispisuje samo redove koji sadrže riječ "GNU" na početku.

grep "^GNU" GPL-3
GNU Opšta javna licenca za većinu našeg softvera; odnosi se i na
GNU Opća javna licenca, možete odabrati bilo koju verziju ikada objavljenu

Isto tako, sidro "$" se može koristiti nakon literalnog niza da bi se naznačilo da je podudaranje važeće samo ako je niz znakova koji se traži na kraju tekstualnog niza.

Sljedeći regularni izraz ispisuje samo one redove koji sadrže "i" na kraju:

grep "and$" GPL-3
da ne postoji garancija za ovaj besplatni softver. Za oba korisnika" i
Precizne odredbe i uslove za kopiranje, distribuciju i


alternativa je dozvoljena samo povremeno i nekomercijalno, i
mreža može biti odbijena kada sama modifikacija materijalno i
negativno utiče na rad mreže ili krši pravila i
privremeno, osim ako i dok nosilac autorskog prava izričito i
prima licencu od originalnih davaoca licence za pokretanje, modificiranje i
napraviti, koristiti, prodati, ponuditi na prodaju, uvoziti i na drugi način pokrenuti, modificirati i

Uskladite bilo koji lik

Tačka (.) se koristi u regularnim izrazima da označi da se bilo koji znak može pojaviti na navedenoj lokaciji.

Na primjer, ako želite pronaći podudaranja koja sadrže dva znaka, a zatim niz "cept", koristili biste sljedeći obrazac:

grep "..cept" GPL-3
korištenje, što je upravo ono gdje je najneprihvatljivije. Stoga, mi
kršenje prema važećem zakonu o autorskim pravima, osim izvršenja na a
kaže korisniku da ne postoji garancija za rad (osim na

obrazac posebno pismene dozvole, ili navedeno kao izuzeci;
Ne smijete propagirati ili modificirati pokriveno djelo osim izričito
9. Prihvatanje nije potrebno za posjedovanje kopija.
...
...

Kao što vidite, rezultati uključuju riječi „prihvatam“ i „osim“, kao i varijacije ovih riječi. Obrazac bi takođe odgovarao sekvenci “z2cept” da je u tekstu.

Izrazi u zagradama

Postavljanjem grupe znakova unutar uglastih zagrada (""), možete naznačiti da se bilo koji od znakova u zagradama može pojaviti na toj poziciji.

To znači da ako trebate pronaći nizove koji sadrže "previše" ili "dva", možete ukratko naznačiti ove varijacije koristeći sljedeći obrazac:

grep "na" GPL-3
Vaši programi takođe.

Programeri koji koriste GNU GPL štite vaša prava u dva koraka:
kompjuterska mreža, bez prijenosa kopije, ne prenosi.

Odgovarajući izvor sa mrežnog servera bez naknade.
...
...

Kao što vidite, obje varijacije su pronađene u datoteci.

Stavljanje znakova u zagrade takođe pruža nekoliko korisnih funkcija. Možete naznačiti da sve osim znakova u zagradama odgovara uzorku tako što ćete listu znakova u zagradama započeti znakom “^”.

Ovaj primjer koristi obrazac ".ode", koji se ne smije podudarati sa sekvencom "code".

grep "[^c]ode" GPL-3
1. Izvorni kod.
model, dati svakome ko posjeduje objektni kod ili (1) a
jedini značajan način upotrebe proizvoda.
primijetite ovako kada se pokrene u interaktivnom načinu rada:

Vrijedi napomenuti da izlaz u drugom redu sadrži riječ "code". Ovo nije regex ili grep greška.

Umjesto toga, ovaj red je odštampan jer također sadrži sekvencu podudaranja uzorka "mode" koja se nalazi u riječi "model". Odnosno, niz je odštampan jer je odgovarao uzorku.

Drugi korisna funkcija zagrade - mogućnost specificiranja raspona znakova umjesto unošenja svakog znaka zasebno.

To znači da ako trebate pronaći svaki red koji počinje velikim slovom, možete koristiti sljedeći obrazac:

grep "^" GPL-3
GNU Opšta javna licenca za većinu našeg softvera; odnosi se i na

Licenca. Svaki korisnik licence se oslovljava sa "vi". "Licence" i


Sistemske biblioteke ili alati opšte namene ili opšte dostupni besplatni
Izvor.

...
...

Zbog nekih inherentnih problema upoređivanja, za preciznije rezultate bolje je koristiti POSIX klase znakova umjesto raspona znakova korištenog u gornjem primjeru.
Postoje mnoge klase znakova koje nisu pokrivene u ovom priručniku; na primjer, da izvršite istu proceduru kao u gornjem primjeru, možete koristiti klasu znakova "[:upper:]" u zagradama.

grep "^[[:upper:]]" GPL-3
GNU Opšta javna licenca za većinu našeg softvera; odnosi se i na
Države ne bi trebale dozvoliti da patenti ograničavaju razvoj i upotrebu
Licenca. Svaki korisnik licence se oslovljava sa "vi". "Licence" i
Komponenta, i (b) služi samo da omogući korištenje rada s tim
Glavna komponenta, ili za implementaciju Standardnog interfejsa za koji je an
Sistemske biblioteke ili alati opšte namene ili opšte dostupni besplatni
Izvor.
Korisnički proizvod se prenosi na primaoca na neodređeno vrijeme ili za a
...
...

Ponovite obrazac (0 ili više puta)

Jedan od najčešće korišćenih metakaraktera je simbol "*", što znači "ponovi prethodni znak ili izraz 0 ili više puta".

Na primjer, ako želite pronaći svaki red s otvarajućim ili zatvarajućim zagradama koji sadrže samo slova i jedan razmak između njih, možete koristiti sljedeći izraz:

grep "(*)" GPL-3

distribuciju (sa ili bez modifikacije), stavljajući na raspolaganje
nego djelo u cjelini, koje (a) je uključeno u normalni oblik
Komponenta, i (b) služi samo da omogući korištenje rada s tim
(ako postoji) na kojoj se izvršava izvršni rad ili kompajler
(uključujući fizički medij za distribuciju), u pratnji
(uključujući fizički medij za distribuciju), u pratnji a
mjestu (besplatno ili uz naplatu) i ponudite ekvivalentan pristup
...
...

Kako izbjeći metakaraktere

Ponekad ćete možda morati da potražite doslovnu tačku ili doslovnu otvorenu zagradu. Budući da ovi znakovi imaju specifično značenje u regularnim izrazima, morate ih "pobjeći" tako što ćete reći grep-u da njihovo posebno značenje u ovom slučaju nije potrebno.

Ovi znakovi se mogu izbjeći korištenjem obrnute kose crte (\) prije znaka, što obično ima posebno značenje.

Na primjer, ako trebate pronaći niz koji počinje velikim slovom i završava se tačkom, možete koristiti donji izraz. Obratna kosa crta prije posljednje tačke govori komandi da je "izbjegne", tako da posljednja tačka predstavlja doslovnu tačku i nema značenje "bilo koji karakter":

grep "^.*\.$" GPL-3
Izvor.
Licencirajte tako što ćete napraviti izuzetke od jednog ili više uslova.
Licenca bi bila da se u potpunosti uzdrži od prenošenja Programa.
SVA POTREBNA SERVISIRANJA, POPRAVKE ILI KOREKCIJE.
TAKVE ŠTETE.
Također dodajte informacije o tome kako vas kontaktirati elektronskom i papirnom poštom.

Napredni regularni izrazi

Naredba Grep se također može koristiti s proširenim jezikom regularnih izraza korištenjem -E zastavice ili pozivanjem naredbe egrep umjesto grep.

Ove komande otvaraju mogućnosti "proširenih regularnih izraza". Prošireni regularni izrazi uključuju sve osnovne metakaraktere, kao i dodatne metaznake za izražavanje složenijih podudaranja.

Grupisanje

Jedna od najjednostavnijih i najkorisnijih karakteristika koje pružaju prošireni regularni izrazi je mogućnost grupisanja izraza i njihovog korištenja kao jedne jedinice.

Zagrade se koriste za grupisanje izraza. Ako trebate koristiti zagrade izvan proširenih regularnih izraza, oni se mogu "pobjeći" pomoću obrnute kose crte

grep "\(grupiranje\)" file.txt
grep -E "(grupiranje)" file.txt
egrep "(grupiranje)" file.txt

Gore navedeni izrazi su ekvivalentni.

Alternacija

Baš kao što uglaste zagrade određuju različita moguća podudaranja za jedan znak, preplitanje vam omogućava da specificirate alternativna podudaranja za nizove znakova ili skupove izraza.

Simbol okomite trake “|” se koristi za označavanje alternacije. Alternacija se često koristi u grupisanju kako bi se naznačilo da se jedna od dvije ili više mogućih opcija treba smatrati podudaranjem.

U ovom primjeru, trebate potražiti “GPL” ili “General Public License”:

grep -E "(GPL|Opšta javna licenca)" GPL-3
GNU Opšta javna licenca je besplatna licenca bez autorskih prava za
GNU Opšta javna licenca ima za cilj da garantuje vašu slobodu da
GNU Opšta javna licenca za većinu našeg softvera; odnosi se i na
Cijena. Naše Opće javne licence su dizajnirane da osiguraju da vi
Programeri koji koriste GNU GPL štite vaša prava u dva koraka:
Za zaštitu programera i autora, GPL jasno objašnjava
autora", GPL zahtijeva da modificirane verzije budu označene kao
su dizajnirali ovu verziju GPL-a kako bi zabranili praksu za njih
...
...

Alternacija se može koristiti za odabir između dvije ili više opcija; Da biste to učinili, morate unijeti preostale opcije u grupu za odabir, odvajajući svaku pomoću simbola okomite trake "|".

Kvantifikatori

U proširenim regularnim izrazima postoje metaznakovi koji označavaju koliko često se znak ponavlja, slično kao što metaznak "*" označava da se prethodni znak ili niz znakova podudaraju 0 ili više puta.

Za podudaranje znaka 0 ili više puta, možete koristiti znak "?". To će učiniti prethodni lik ili niz znakova u suštini opcionalnim.

U ovom primjeru, umetanjem sekvence “copy” u opcionu grupu, prikazuju se podudaranja “copyright” i “right”:

grep -E "(kopija)? desno" GPL-3
Autorska prava (C) 2007 Free Software Foundation, Inc.
Da bismo zaštitili vaša prava, moramo spriječiti druge da vas uskraćuju
ova prava ili traženje da se odreknete prava. Dakle, imate
znaju svoja prava.
Programeri koji koriste GNU GPL štite vaša prava u dva koraka:
(1) potvrditi autorska prava na softver i (2) ponuditi vam ovu Licencu
"Autorska prava" također znači zakone slične autorskim pravima koji se primjenjuju na druge vrste
...
...

Znak "+" odgovara izrazima 1 ili više puta. Radi skoro kao simbol "*", ali kada se koristi "+" izraz se mora podudarati najmanje 1 put.

Sljedeći izraz odgovara nizu "free" plus 1 ili više znakova koji nisu razmak:

grep -E "slobodan[^[:space:]]+" GPL-3
GNU Opšta javna licenca je besplatna licenca bez autorskih prava za
da vam oduzmemo slobodu da delite i menjate radove. U kontrastu,
GNU Opšta javna licenca ima za cilj da garantuje vašu slobodu da
Kada govorimo o slobodnom softveru, mislimo na slobodu, ne
imaju slobodu da distribuiraju kopije besplatnog softvera (i naplaćuju za

slobode koje ste dobili. Morate se pobrinuti da i oni primaju
štiteći slobodu korisnika da mijenjaju softver. Sistematski
GPL-a, prema potrebi za zaštitu slobode korisnika.
patenti se ne mogu koristiti da se program učini neslobodnim.

Broj ponovljenih utakmica

Ako treba da navedete koliko puta podudaranja treba ponoviti, možete koristiti vitičaste zagrade (“( )”). Ovi simboli se koriste za označavanje tačnog broja, opsega i gornje i donje granice broja podudaranja izraza.

Ako trebate pronaći sve redove koji sadrže kombinaciju tri samoglasnika, možete koristiti sljedeći izraz:

grep -E "(3)" GPL-3
promijenjeni, kako se njihovi problemi ne bi pogrešno pripisali
autori prethodnih verzija.
primite ga, u bilo kom mediju, pod uslovom da upadljivo i
dati prema prethodnom stavu, plus pravo na posjed
pokriveni rad kako biste istovremeno zadovoljili svoje obaveze prema ovome
Ako trebate pronaći sve riječi koje se sastoje od 16-20 znakova, koristite sljedeći izraz:
grep -E "[[:alpha:]](16,20)" GPL-3
određene odgovornosti ako distribuirate kopije softvera, ili ako
vi ga modifikujete: odgovornosti za poštovanje slobode drugih.
c) Zabrana lažnog predstavljanja porijekla tog materijala, ili

zaključci

U mnogim slučajevima, naredba grep je korisna za pronalaženje obrazaca unutar datoteka ili u hijerarhiji sistem podataka. Štedi mnogo vremena, pa je vrijedno upoznati se s njegovim parametrima i sintaksom.

Regularni izrazi su još raznovrsniji i mogu se koristiti u mnogim popularnim programima. Na primjer, mnogi uređivači teksta koristite regularne izraze za pretraživanje i zamjenu teksta.

Štaviše, napredni programski jezici koriste regularne izraze za izvršavanje procedura na određenim delovima podataka. Poznavanje rada sa regularnim izrazima je korisno kada se rješavaju uobičajeni problemi vezani za računar.

Tagovi: ,

Dobar dan, gosti!

U današnjem članku želim se dotaknuti tako velike teme kao što je Regularni izrazi. Mislim da svi znaju da je tema regularnih izraza (kako se u slengu nazivaju regularni izrazi) ogromna u okviru jednog posta. Stoga ću pokušati ukratko, ali što jasnije, sabrati svoje misli i prenijeti vam ih u .

Dozvolite mi da počnem tako što kažem da postoji nekoliko tipova regularnih izraza:

1. Tradicionalni regularni izrazi(oni su takođe osnovni, osnovni i osnovne regularne izraze(BRE))

  • Sintaksa ovih izraza je definirana kao zastarjela, ali je ipak još uvijek široko rasprostranjena i koriste je mnogi UNIX uslužni programi
  • Osnovni regularni izrazi uključuju sljedeće metakaraktere (više o njihovom značenju u nastavku):
    • \( \) - početna verzija za ( ) (u proširenom)
    • \(\) - početna verzija za () (u proširenom)
    • \n, Gdje n- broj od 1 do 9
  • Karakteristike korištenja ovih metakaraktera:
    • Zvjezdica mora pratiti izraz koji odgovara jednom znaku. Primjer: *.
    • Izraz \( blok\)* treba smatrati netačnim. U nekim slučajevima odgovara nula ili više ponavljanja niza blok. U drugima odgovara nizu blok* .
    • Unutar klase znakova, značenja posebnih znakova se uglavnom zanemaruju. Posebni slučajevi:
    • Da biste dodali znak ^ u skup, on ne smije biti prvi tamo.
    • Da biste dodali znak - u skup, on mora biti postavljen prvi ili zadnji. Na primjer:
      • Šablon DNS imena, koji može uključivati ​​slova, brojeve, minus i tačku: [-0-9a-zA-Z.] ;
      • bilo koji znak osim minusa i brojeva: [^-0-9] .
    • Da biste dodali znak [ ili ] skupu, on se mora prvo postaviti tamo. Na primjer:
      • odgovara ], [, a ili b.

2. Napredni regularni izrazi(oni su prošireni regularni izrazi(ERE))

  • Sintaksa ovih izraza je slična sintaksi glavnih izraza, sa izuzetkom:
    • Uklonjena je upotreba obrnutih kosih crta za ( ) i () metakaraktere.
    • Obrnuta kosa crta ispred metaznaka nadjačava njegovo posebno značenje.
    • Odbijeno teoretski nepravilan dizajn\ n .
    • Dodati metaznakovi + , ? , | .

3. Regularni izrazi kompatibilni sa Perl-om(oni su Perl-kompatibilni regularni izrazi(PCRE))

  • imaju bogatiju i istovremeno predvidljivu sintaksu od čak POSIX ERE, pa ih aplikacije često koriste.

Regularni izrazi sastoji se odšablone, odnosno postavite šablon traži. Šablon se sastoji od pravila pretrage koje se sastoje od karaktera I metakarakteri.

Pravila pretraživanja određuju se sljedećim operacije:

Nabrajanje |

cijev (|) odvaja važeće opcije, moglo bi se reći - logičko ILI. Na primjer, "sivo|sivo" se podudara siva ili siva.

Grupa ili sindikat()

Okrugle zagrade koriste se za definiranje opsega i prioriteta operatora. Na primjer, "sive|grey" i "gr(a|e)y" su različiti obrasci, ali oba opisuju skup koji sadrži siva I siva.

Kvantifikovati()? * +

Kvantifikator nakon što znak ili grupa određuje koliko puta antecedent može doći do ekspresije.

opšti izraz, ponavljanja mogu biti od m do n uključujući.

opšti izraz m ili više ponavljanja.

opšti izraz ne više od n ponavljanja.

glatkon ponavljanja.

Upitnik znači 0 ili 1 puta, isto kao {0,1} . Na primjer, "colou?r" odgovara i boja, And boja.

Star znači 0, 1 ili bilo koji broj jednom ( {0,} ). Na primjer, "go*gle" se podudara ggle, Google, google i sl.

Plus znači najmanje 1 jednom ( {1,} ). Na primjer, "go+gle" se podudara Google, google itd. (ali ne ggle).

Tačna sintaksa ovih regularnih izraza ovisi o implementaciji. (odnosno u osnovne regularne izraze simboli ( i )- pobjegno s obrnutom kosom crtom)

Metakarakteri, jednostavno rečeno, su simboli koji ne odgovaraju njihovom pravom značenju, odnosno simbol. (tačka) nije tačka, već bilo koji znak, itd. Molimo vas da se upoznate sa metaznacima i njihovim značenjima:

. odgovara sam bilo koji simbol
[nešto] Compliant bilo koji singl znak od onih u zagradama. U ovom slučaju: znak “-” se tumači doslovno samo ako se nalazi odmah nakon početne ili prije završne zagrade: ili [-abc]. Inače, označava interval karaktera. Na primjer, odgovara "a", "b" ili "c". odgovara malim slovima latinice. Ove oznake se mogu kombinovati: odgovaraju a, b, c, q, r, s, t, u, v, w, x, y, z. Za podudaranje znakova “[” ili “]” dovoljno je da Završna zagrada je prvi znak nakon početnog znaka: odgovara "]", "[", "a" ili "b". Ako vrijednosti u uglastim zagradama prethodi znak ^, tada se vrijednost izraza podudara jedan karakter među njima koje nisu u zagradama. Na primjer, [^abc] odgovara bilo kojem znaku osim "a", "b" ili "c". [^a-z] odgovara bilo kojem znaku osim malim slovima u latiničnom alfabetu.
^ Poklapa se s početkom teksta (ili početkom bilo kojeg retka ako je način red po red).
$ Odgovara kraju teksta (ili kraju bilo kojeg reda ako je način red po red).
\(\) ili () Deklariše "označeni podizraz" (grupisani izraz) koji se može koristiti kasnije (pogledajte sljedeći element: \ n). "Označeni podizraz" je takođe "blok". Za razliku od drugih operatora, ovaj (u tradicionalnoj sintaksi) zahtijeva obrnutu kosu crtu; u proširenom i Perl-u, znak \ nije potreban.
\n Gdje n- ovo je broj od 1 do 9; odgovara n th označeni podizraz (na primjer (abcd)\0, to jest, znakovi abcd su označeni nulom). Ovaj dizajn je teoretski nepravilan, nije prihvaćeno u proširenoj sintaksi regularnog izraza.
*
  • Star nakon izraza koji odgovara jednom znaku, odgovara nula ili više kopije ovaj (prethodni) izraz. Na primjer, "*" odgovara praznom nizu, "x", "y", "zx", "zyx", itd.
  • \n*, Gdje n je cifra od 1 do 9, odgovara nula ili više pojavljivanja za podudaranje n th označeni podizraz. Na primjer, "\(a.\)c\1*" odgovara "abcab" i "abcaba", ali ne i "abcac".

Izraz zatvoren u "\(" i "\)" iza kojeg slijedi "*" treba se smatrati nezakonitim. U nekim slučajevima, odgovara nula ili više pojavljivanja niza koji je zatvoren u zagradama. U drugim slučajevima, odgovara izrazu zatvorenom u zagradama, s obzirom na znak "*".

\{x,y\} Odgovara posljednjem ( predstojeći) blok koji se javlja najmanje x i ne više y jednom. Na primjer, "a\(3,5\)" odgovara "aaa", "aaaa" ili "aaaaa". Za razliku od drugih operatora, ovaj (u tradicionalnoj sintaksi) zahtijeva obrnutu kosu crtu.
.* Označavanje bilo kojeg broja bilo kojeg karaktera između dva dijela regularnog izraza.

Metaznakovi nam pomažu da koristimo različite podudarnosti. Ali kako možemo predstaviti metaznak kao običan znak, odnosno simbol [ (uglata zagrada) sa značenjem uglaste zagrade? samo:

  • mora prethoditi ( štit) metaznak (. * + \ ? ( )) obrnuta kosa crta. Na primjer \. ili \[

Da bi se pojednostavila definicija nekih skupova karaktera, oni su kombinovani u tzv. klase i kategorije likova. POSIX je standardizirao deklaraciju određenih klasa znakova i kategorija, kao što je prikazano u sljedećoj tabeli:

POSIX klasa slično oznaka
[:upper:] velika slova
[:niže:] mala slova
[:alpha:] velika i mala slova
[:alnum:] brojevi, velika i mala slova
[:cifra:] brojevi
[:xdigit:] heksadecimalne cifre
[:punct:] [.,!?:…] znakovi interpunkcije
[:blank:] [\t] razmak i TAB
[:prostor:] [\t\n\r\f\v] preskakanje znakova
[:cntrl:] kontrolni znakovi
[:graf:] [^\t\n\r\f\v] simboli pečata
[:print:] [^\t\n\r\f\v] simboli pečata i simboli preskakanja

U regularnom izrazu postoji nešto poput:

Regex pohlepe

Pokušat ću to opisati što je moguće jasnije. Recimo da želimo sve pronaći HTML oznake u nekom tekstu. Nakon što smo lokalizirali problem, želimo pronaći vrijednosti koje se nalaze između< и >, zajedno sa ovim istim zagradama. Ali znamo da tagovi imaju različite dužine i da ih ima najmanje 50. Navođenje svih njih, zatvaranje u metasimbole, je previše dugotrajan zadatak. Ali znamo da imamo izraz.* (tačka zvjezdica), koji karakterizira bilo koji broj bilo kojeg karaktera u redu. Korišćenjem dati izraz pokušaćemo da nađemo u tekstu (

dakle, Kako kreirati RAID nivo 10/50 na LSI MegaRAID kontroleru (takođe relevantno za: Intel SRCU42x, Intel SRCS16):

) sve vrijednosti između< и >. Kao rezultat, CIJELA linija će odgovarati ovom izrazu. zašto, jer je regex POHLEPAN i pokušava uhvatiti BILO KOJI SVE broj znakova između< и >, odnosno cijela linija, počevši < p>Dakle... i kraj ...> pripadaće ovom pravilu!

Nadam se da ovaj primjer pokazuje šta je pohlepa. Da biste se riješili ove pohlepe, možete slijediti sljedeći put:

  • uzeti u obzir simbole Ne koji odgovara željenom uzorku (na primjer:<[^>]*> za gornji slučaj)
  • riješite se pohlepe dodavanjem definicije kvantifikatora kao nepohlepnog:
    • *? - "nije pohlepan" ("lijenji") ekvivalent *
    • +? - "nije pohlepan" ("lijenji") ekvivalent +
    • (n,)? - "nije pohlepan" ("lijenji") ekvivalent (n,)
    • .*? - "nije pohlepan" ("lijenji") ekvivalent.*

Hteo bih da dodam na sve gore navedeno proširena sintaksa regularnog izraza:

Regularni izrazi u POSIX-u su slični tradicionalnoj Unix sintaksi, ali sa dodatkom nekih metakaraktera:

Plus ukazuje na to prethodni simbol ili grupa može se ponoviti jedan ili više puta. Za razliku od zvjezdice, potrebno je barem jedno ponavljanje.

Upitnik radi prethodni simbol ili grupa opciono. Drugim riječima, u odgovarajućem redu it može biti odsutan ili prisutan glatko jedan jednom.

Vertikalna traka deli alternativne opcije regularni izrazi. Jedan znak specificira dvije alternative, ali ih može biti više, samo koristite više okomitih traka. Važno je zapamtiti da ovaj operator koristi što je više moguće izraza. Iz tog razloga, alternativni operator se najčešće koristi unutar zagrada.

Upotreba obrnutih kosih crta je također ukinuta: \(…\) postaje (…) i \(…\) postaje (…).

Da zaključim post, navest ću nekoliko primjera korištenja redovnog izraza:

$ cat text1 1 jabuka 2 kruška 3 banana $ grep p text1 1 jabuka 2 kruška $ grep "pp*" text1 1 jabuka 2 kruška $ cat text1 | grep "l\|n" 1 jabuka 3 banana $ echo -e "pronađi\n* ovdje" | grep "\*" * ovdje $ grep "pl\?.*r" text1 # p, na redovima u kojima se nalazi r 2 kruška $ grep "a.." text1 # redovi sa a iza kojeg slijede najmanje 2 znaka 1 jabuka 3 banana $ grep "" text1 # traži redove koji sadrže 3 ili p 1 jabuka 2 kruška 3 banana $ echo -e "pronađi\n* ovdje\nnegdje." | grep "[.*]" * ovdje negdje..name]$ echo -e "123\n456\n789\n0" | grep "" 123,456,789 $ sed -e "/\(a.*a\)\|\(p.*p\)/s/a/A/g" text1 # zameni a sa A u svim redovima gde posle a dolazi a ili iza p dolazi p 1 Jabuka 2 kruška 3 bAnAnA *\./ POSLEDNJA RIJEČ./g" Prvo. POSLJEDNJA RIJEČ. Ovo je POSLJEDNJA RIJEČ.

Srdačan pozdrav, McSim!

grep je skraćenica za 'globalni štampač regularnih izraza'. grep seče linije koje su vam potrebne tekstualne datoteke koji sadrže tekst koji je odredio korisnik.

grep se može koristiti na dva načina - samostalno ili u kombinaciji sa streamovima.

grep je veoma opsežan u funkcionalnosti zbog velikog broja opcija koje podržava, kao što su: pretraživanje pomoću obrasca stringova ili šablona regularnog izraza RegExp ili regularnih izraza zasnovanih na Perl-u, itd.

Zbog svoje različitosti funkcionalnost Alat grep ima mnogo opcija uključujući egrep (prošireni GREP), fgrep (fiksni GREP), pgrep (Proces GREP), rgrep (rekurzivni GREP) itd. Ali ove opcije imaju male razlike u odnosu na originalni grep.

grep opcije

$ grep -V grep (GNU grep) 2.10 Autorsko pravo (C) 2011 Free Software Foundation, Inc. Licenca GPLv3+

Postoje modifikacije uslužnog programa grep: egrep (sa proširenom obradom regularnog izraza), fgrep (koji tretira $*^|()\ simbole kao literale, tj. doslovno), rgrep (sa omogućenim rekurzivnim pretraživanjem).

    egrep je isto što i grep -E

    fgrep je isto što i grep -F

    rgrep je isto što i grep -r

    grep [-b] [-c] [-i] [-l] [-n] [-s] [-v] ograničeni_regex_BRE [datoteka ...]

Naredba grep poklapa redove u izvornim datotekama sa obrascem specificiranim ograničenim_regexom. Ako nije navedena nijedna datoteka, koristi se standardni unos. Obično se svaki uspješno uparen niz kopira u standardni izlaz; ako postoji nekoliko izvornih datoteka, ime datoteke se daje prije pronađenog reda. grep koristi kompaktan, nedeterministički algoritam. Ograničeni regularni izrazi (izrazi koji imaju nizove znakova sa svojim značenjima i koriste ograničen skup alfanumeričkih i specijalnih znakova) se doživljavaju kao predlošci. Imaju isto značenje kao i regularni izrazi u ed.

Za izbjegavanje znakova $, *, , ^, |, () i \ iz ljuske interpretacije, najlakše je staviti ograničeni_regex u jednostruke navodnike.

Opcije:

B Predgovor svakom redu s brojem bloka u kojem je pronađen. Ovo može biti korisno kada tražite blokove po kontekstu (blokovi su numerirani počevši od 0). -c Štampa samo broj linija koje sadrže uzorak. -h Sprečava da se ime datoteke koja sadrži odgovarajući red ispiše prije samog reda. Koristi se prilikom pretraživanja više datoteka. -i Zanemaruje velika i mala slova prilikom poređenja. -l Štampa samo imena datoteka koje sadrže odgovarajuće stringove, po jedan po redu. Ako se uzorak pronađe na više redova datoteke, naziv datoteke se ne ponavlja. -n Ispisuje ispred svakog reda svoj broj u datoteci (redovi su numerisani počevši od 1). -s Suzbija poruke o nepostojećim ili nečitljivim datotekama. -v Ispisuje sve linije osim onih koji sadrže uzorak. -w Pretražuje izraz kao riječ, kao da je okružen metaznacima \< и \>.

grep --pomoć

Upotreba: grep [OPCIJA]... UZORAK [DATOTEKA]... Trazi UZORAK u svakom FILE-u ili standardnom ulazu. Po defaultu, PATTERN je jednostavan regularni izraz (BRE). Primjer: grep -i "hello world" menu.h main.c Odabir tipa regularnog izraza i njegove interpretacije: -E, --extended-regexp PATTERN - prošireni regularni izraz (ERE) -F, --fixed-regexp PATTERN - stringovi fiksne dužine, odvojeni znakom novog reda -G, --basic-regexp UBRAZAC - jednostavan regularni izraz (BRE) -P, --perl-regexp UBRAZAC - Perl regularni izrazi -e, --regexp=PATTERN koriste OBRAZAC za pretraga - f, --file=DATOTEKA uzmi Uzorak iz DATOTEKE -i, --ignore-case ignoriraj razliku velikih i malih slova -w, --word-regexp UBRAZAC mora odgovarati svim riječima -x, --line-regexp Uzorak mora odgovarati cijelom redu -z, --null-data linije su odvojene nul bajtom, a ne znakom za kraj reda Razno: -s, --no-messages potiskuju poruke o grešci -v, --revert-match odaberite neusklađene linije -V, - - verzija ispis informacija o verziji i izlaz --help prikaži ovu pomoć i izađi --mmap za kompatibilnost unatrag, zanemareno Kontrola izlaza: -m, --max-count=BROJ zaustavljanja nakon navedenog BROJA podudaranja -b, --byte-offset ispisati pomak bajta zajedno sa izlaznim linijama -n, --line-number ispisati liniju broj zajedno sa izlaznim linijama --line-buffered isprazniti bafer nakon svakog reda -H, --with-filename ispisati ime datoteke za svako podudaranje -h, --no-filename ne počinjati izlaz s imenom datoteke -- label=LABEL koristi LABEL kao ime datoteke za standardni unos -o, --only-matching prikaži samo dio reda koji odgovara PATTERN -q, --quiet, --silent potisne sav normalan izlaz --binary-files=TYPE pretpostavljam to binarni fajl ima TIP: binarni, tekstualni ili bez podudaranja. -a, --tekst isto kao --binary-files=tekst -I isto kao --binary-files=bez podudaranja -d, --directories=AKCIJA kako rukovati direktorijima AKCIJA se može čitati ), rekurzivno (rekurzivno) ili preskočiti (preskočiti). -D, --devices=ACTION kako rukovati uređajima, FIFO-ovima i utičnicama AKCIJA se može pročitati ili preskočiti -R, -r, --rekurzivno isto kao --directories=recurse --include=F_PATTERN obrađuje samo datoteke koje odgovaraju pod F_TEMPLATE - -exclude=F_TEMPLATE preskoči fajlove i direktorijume koji se podudaraju sa F_TEMPLATE --exclude-from=DATOTEKA preskoči fajlove koji se podudaraju sa fajlovima šablona iz FILE --exclude-dir=direktoriji koji se podudaraju sa OBRAZOM će biti preskočeni -L, - -datoteke-bez podudaranja samo za štampanje Imena DATOTEKA bez podudaranja -l, --files-with-podudaranja štampaju samo imena DATOTEKA sa podudaranjima -c, --count štampaju samo broj odgovarajućih redova po DATOTECI -T, --početno-tab poravnajte karticu (ako je potrebno) - Z, --null ispis bajta 0 iza imena FILE Upravljanje kontekstom: -B, --before-context=NUM ispis BROJ redova prethodnog konteksta -A, --after-context=NUM ispis BROJ redova sljedeći kontekst -C, --context[=NUMBER] ispisuje BROJ kontekstnih linija -NUMBER je isti kao --context=NUMBER --color[=WHEN], --colour[=WHEN] koriste markere za razlikovanje podudaranja linije; KADA može biti uvijek, nikad ili auto -U, --binarni ne uklanjaj CR znakove na kraju reda (MSDOS) -u, --unix-byte-offsets pokazuju pomak kao da nema CR-ova (MSDOS ) Umjesto “egrep”, trebalo bi da pokrene “grep -E”. "grep -F" se pretpostavlja umjesto "fgrep". Bolje je ne pokretati kao “egrep” ili “fgrep”. Kada FILE nije specificiran, ili kada je FILE -, tada se čita standardni unos. Ako je navedeno manje od dvije datoteke, pretpostavlja se -h. Ako se pronađe podudaranje, izlazni kod će biti 0, a ako nije 1. Ako dođe do greške ili ako opcija -q nije navedena, izlazni kod će biti 2. Prijavite greške na: Molimo prijavite greške u prijevodu na: GNU Grep početna stranica: Pomoć za rad sa GNU programima: