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

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

$ grep igla haystack.txt

Kao rezultat toga, grep će prikazati sva pojavljivanja needle 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, bit će prikazani nizovi koji uključuju riječ "nepotrebno" i druge riječi koje sadrže niz "igla".


Da kažete grep-u 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, interpunkcijskim znakovima ili prijelomima redaka.

$ grep -w igla plast sijena.txt

Nije potrebno ograničiti pretraživanje na samo jednu datoteku; grep može pretraživati ​​kroz grupu datoteka, a rezultati pretraživanja će pokazati datoteku u kojoj je pronađeno podudaranje. Prekidač -n također će dodati broj retka u kojem je pronađeno podudaranje, a preklopnik -r omogućit će vam izvođenje rekurzivnog pretraživanja. Ovo je vrlo zgodno kada tražite među datotekama s izvornim kodovima programa.

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

Naziv datoteke bit će naveden prije svakog podudaranja. Ako trebate sakriti nazive datoteka, koristite prekidač -h, naprotiv, ako trebate samo nazive datoteka, navedite prekidač -l
U sljedećem primjeru tražit ćemo URL-ove u IRC log datoteci i prikazati zadnjih 10 podudaranja.

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

Opcija -o govori grepu da ispiše samo podudaranje uzorka, a ne cijeli redak. Korištenjem cijevi preusmjeravamo izlaz grep-a na naredbu tail, koja prema zadanim postavkama ispisuje zadnjih 10 redaka.
Sada ćemo prebrojati broj poruka koje su određeni korisnici poslali na irc kanal. Na primjer, sve poruke koje sam poslao 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 "^korisnik_kod_(kuća|posao)" kanal.log

S opcijom -c, grep ispisuje samo broj pronađenih podudaranja, ne i sama podudaranja. Niz za pretraživanje nalazi se u navodnicima 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 "" koristi se za izbjegavanje posebnih znakova.
Potražimo poruke ljudi koji vole "vrištati" na kanalu. Pod "vriskom" mislimo na poruke napisane plavim stilom, isključivo VELIKIM slovima. Kako bismo isključili nasumične pogotke kratica 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 stranicu priručnika za 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 retke iz /etc/passwd datoteke koje sadrže korijen niza.

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

Osim toga, prikazani su brojevi redaka koji sadrže traženi redak.

# grep -v bash /etc/passwd | grep -v nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin :/sbin/halt vijesti:x:9:13:vijesti:/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 računa koji imaju /bin/false kao svoju ljusku.

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

Ova naredba prikazuje retke iz svih datoteka u početnom direktoriju trenutni korisnik, čiji nazivi počinju s ~/.bash, osim onih datoteka čiji nazivi sadrže povijest nizova, kako bi se isključila podudaranja pronađena u datoteci ~/.bash_history, koja može imati isti redak u gornjem ili u malom obliku. Imajte na umu da se traži riječ "igre"; umjesto nje možete zamijeniti bilo koju drugu riječ.
grep naredba i regularni izrazi

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

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

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

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

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

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

Klase znakova

Izraz u uglatim zagradama je popis znakova unutar znakova [" i "]"". Odgovara bilo kojem pojedinačnom znaku navedenom na ovom popisu; ako je prvi znak popisa "^", tada odgovara bilo kojem znaku koji NIJE na popisu. Na primjer, regularni izraz "" odgovara bilo kojoj jednoj znamenki.

Unutar izraza u uglatim zagradama možete navesti raspon koji se sastoji od dva znaka odvojena crticom. Tada izraz odgovara bilo kojem pojedinačnom elementu koji, prema pravilima sortiranja, spada unutar ova dva znaka, uključujući ova dva znaka; ovo uzima u obzir uspoređivanje i skup znakova navedenih u lokalnoj postavci. Na primjer, kada je zadana lokalizacija C, izraz "" je ekvivalentan izrazu "". Postoje mnoge lokalne postavke u kojima se sortiranje vrši prema rječničkom redoslijedu, au tim lokalnim oznakama "" općenito nije ekvivalentno "", u kojem, na primjer, može biti ekvivalentno izrazu "". Za korištenje tradicionalnog tumačenja izraza u zagradama, možete koristiti C lokalizaciju postavljanjem varijable okoline LC_ALL na "C".

Konačno, postoje posebno imenovane klase znakova, koje su navedene unutar izraza u uglatim zagradama. Dodatne informacije Za informacije o ovim unaprijed definiranim izrazima pogledajte stranice priručnika ili dokumentaciju naredbe grep.

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

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

Koristiti "." odgovarati bilo kojem pojedinačnom znaku. Ako želite popis svih engleskih riječi preuzetih iz rječnika koji sadrži pet znakova koji počinju s "c" i završavaju s "h" (korisno za rješavanje križaljki):

# grep " " /usr/share/dict/words catch clash krpa trener kauč kašalj sudar simpatija

Ako želite prikazati retke koji sadrže znak točke kao literal, navedite opciju -F u naredbi grep. simboli "< " и «>" znači prisutnost praznog retka prije i, prema tome, nakon navedenih slova. To znači da riječi u word datoteci moraju biti napisane u skladu s tim. Ako želite pronaći sve riječi u tekstu prema zadanim obrascima bez uzimanja u obzir praznih redaka, izostavite simbole "< " и «>", za precizniju pretragu samo riječi koristite -w prekidač.

Da biste na sličan način pronašli riječi koje mogu imati bilo koji broj znakova između "c" i "h", upotrijebite zvjezdicu (*). Primjer u nastavku odabire sve riječi koje počinju s "c" i završavaju s "h" iz rječnika sustava:

# grep " " /usr/share/dict/words kalif gotovina ulov gaza 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 datoteci /etc/profile bez navodnika, što rezultira time da ništa nije pronađeno. Kada se koriste navodnici, ispisuje se rezultat:

# grep * /etc/profile # grep "*" /etc/profile for i u /etc/profile.d/*.sh ; čini

Kako biste u potpunosti obradili tekstove u bash skriptama koristeći sed i awk, samo trebate razumjeti regularne izraze. Implementacije ovog najkorisnijeg alata mogu se pronaći doslovno posvuda, a iako su svi regularni izrazi strukturirani na sličan način i temelje se na istim idejama, rad s njima u različitim okruženjima ima određene značajke. Ovdje ćemo govoriti o regularnim izrazima koji su prikladni za korištenje u skriptama naredbeni redak Linux.

Ovaj materijal je zamišljen kao uvod u regularne izraze, namijenjen onima koji možda uopće nisu svjesni što oni jesu. Pa krenimo od samog početka.

Što su regularni izrazi

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


Po našem mišljenju, čak će i apsolutni početnik odmah shvatiti kako radi i zašto je potreban :) Ako vam nije sasvim jasno, samo čitajte dalje i sve će doći na svoje mjesto.
Regularni izraz je uzorak koji programi kao što su sed ili awk koriste za filtriranje teksta. Predlošci koriste uobičajene ASCII znakove koji predstavljaju sami sebe i takozvane metaznakove koji imaju posebnu ulogu, na primjer, omogućujući referencu na određene skupine znakova.

Vrste regularnih izraza

Implementacije regularnih izraza u različitim okruženjima, na primjer, u programskim jezicima kao što su Java, Perl i Python, te u Linux alatima kao što su sed, awk i grep, imaju određene značajke. Ove značajke ovise o takozvanim regularnim izrazima, koji tumače uzorke.
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 uslužnih programa za Linux usklađena je barem s 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 često se implementira u programske jezike. Omogućuje 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, ovisno o mišljenju programera i značajkama motora za koji su stvoreni. Nije lako napisati univerzalne regularne izraze koje svaki stroj može razumjeti. Stoga ćemo se usredotočiti na najčešće korištene regularne izraze i pogledati značajke njihove implementacije za sed i awk.

POSIX BRE regularni izrazi

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

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

Traženje teksta prema uzorku u sed-u


Traženje teksta prema uzorku u awk

Možda ćete primijetiti da se traženje zadanog uzorka izvodi bez uzimanja u obzir toč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 daljnju obradu.

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

$ echo "Ovo je test" | awk "/Test/(ispis $0)" $ echo "Ovo je test" | awk "/test/(ispiši $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 za traženje riječi napisane velikim slovima, pronašao je odgovarajući redak 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/(ispiši $0)"

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

Razmaci se tretiraju kao regularni znakovi od strane regularnog izraza.

Posebni simboli

Korištenje razni likovi U regularnim izrazima morate uzeti u obzir neke značajke. Dakle, postoje neki posebni znakovi, ili metaznakovi, čija upotreba u predlošku zahtijeva poseban pristup. Evo ih:

.*^${}\+?|()
Ako je jedan od njih potreban u predlošku, trebat će ga 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, a ispred njega treba staviti znak za izlaz. Recimo da postoji datoteka myfile sa sljedećim tekstom:

Imam 10 dolara u džepu
Znak dolara može se otkriti pomoću ovog uzorka:

$awk "/\$/(ispis $0)" moja datoteka

Korištenje posebnog znaka u uzorku

Osim toga, obrnuta kosa crta također je poseban znak, pa ako je trebate upotrijebiti u uzorku, morat ćete je i izbjeći. Izgleda kao dvije kose crte koje slijede jedna za drugom:

$ echo "\ je poseban znak" | awk "/\\/(ispiši $0)"

Izbjegavanje obrnute kose crte

Iako kosa crta nije uključena u gornji popis posebnih znakova, pokušaj njezine upotrebe u regularnom izrazu napisanom za sed ili awk rezultirat će pogreškom:

$ echo "3 / 2" | awk "///(ispiši $0)"

Netočna upotreba kose crte u uzorku

Ako je potrebno, mora se i izbjeći:

$ echo "3 / 2" | awk "/\//(ispiši $0)"

Izbjegavanje kose crte

Simboli sidra

Postoje dva posebna znaka za povezivanje uzorka s početkom ili krajem tekstualnog niza. Znak cap - ^ omogućuje vam da opišete nizove znakova koji se nalaze na početku redaka teksta. Ako je uzorak koji tražite negdje drugdje u nizu, regularni izraz neće odgovoriti na njega. Upotreba ovog simbola izgleda ovako:

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

Pronalaženje uzorka na početku niza

Znak ^ je dizajniran za traženje uzorka na početku retka, dok se velika i velika slova također uzimaju u obzir. Pogledajmo kako to utječe na obradu tekstualne datoteke:

$awk "/^ovo/(ispiši $0)" moja datoteka


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

Kada koristite sed, ako postavite kapu negdje unutar uzorka, ona će se tretirati kao bilo koji drugi uobičajeni znak:

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

Kapica nije na početku uzorka u sed-u

U awk-u, kada koristite isti predložak, ovaj se znak mora izbjeći:

$ echo "Ovo ^ je test" | awk "/s\^/(ispiši $0)"

Naslovnica ne na početku predloška u awk

Shvatili smo traženje fragmenata teksta koji se nalaze na početku retka. Što ako trebate pronaći nešto na kraju retka?

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

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

Pronalaženje teksta na kraju retka

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$/(ispiši $0)" moja datoteka


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

Kao što vidite, predložak je odgovorio samo na redak koji je u potpunosti odgovarao zadanom nizu znakova i njihovom položaju.

Evo kako filtrirati prazne retke pomoću znakova sidra:

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

Simbol točke

Točka se koristi za podudaranje bilo kojeg pojedinačnog znaka osim znaka novog retka. Proslijedimo datoteku myfile ovom regularnom izrazu, čiji je sadržaj dan u nastavku:

$awk "/.st/(print $0)" moja datoteka


Korištenje točke u regularnim izrazima

Kao što je vidljivo iz izlaznih podataka, samo prva dva retka iz datoteke odgovaraju uzorku jer sadrže slijed znakova “st” ispred kojeg stoji još jedan znak, dok treći red ne sadrži odgovarajući niz, a četvrti ga ima, ali je na samom početku retka.

Klase znakova

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

Zahvaljujući ovom pristupu, možete organizirati potragu za bilo kojim znakom iz zadanog skupa. Za opis klase znakova koriste se uglate zagrade:

$awk "/th/(print $0)" moja datoteka


Opis klase znakova u regularnom izrazu

Ovdje tražimo niz znakova "th" ispred znaka "o" ili znaka "i".

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

$ echo "ovo je test" | awk "/njegov je test/(ispis $0)" $ echo "Ovo je test" | awk "/njegovo je test/(ispiši $0)"

Tražite riječi koje mogu započ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 biti potrebna nastava - sve ovisi o problemu koji se rješava.

Negacija klasa karaktera

Klase znakova također se mogu koristiti za rješavanje inverznog problema koji je gore opisan. Naime, umjesto traženja simbola uključenih u klasu, možete organizirati pretragu svega što nije uključeno u klasu. Kako biste postigli ovakvo ponašanje regularnog izraza, trebate staviti znak ^ ispred popisa znakova klase. Ovako izgleda:

$ awk "/[^oi]th/(print $0)" moja datoteka


Pronalaženje likova koji nisu u klasi

U ovom slučaju, pronaći će se nizovi znakova “th” kojima ne prethodi ni “o” ni “i”.

Rasponi znakova

U klasama znakova možete opisati raspon znakova koristeći crtice:

$awk "/st/(print $0)" moja datoteka


Opis niza znakova u klasi znakova

U u ovom primjeru regularni izraz odgovara nizu znakova "st" ispred kojih stoji bilo koji znak koji se nalazi u abecedni red, između znakova "e" i "p".

Rasponi 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)" moja datoteka


Klasa znakova koja se sastoji od nekoliko raspona

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

Klase posebnih znakova

BRE ima posebne klase znakova koje možete koristiti pri pisanju regularnih izraza:
  • [[:alpha:]] - odgovara bilo kojem abecednom znaku, napisanom velikim ili malim slovima.
  • [[:alnum:]] - odgovara bilo kojem alfanumeričkom znaku, odnosno znakovima u rasponu od 0-9, A-Z, a-z.
  • [[:blank:]] - odgovara razmaku i tabulatoru.
  • [[:digit:]] - bilo koja znamenka od 0 do 9.
  • [[:upper:]] - velika slova - A-Z .
  • [[:lower:]] - mala slova - a-z .
  • [[:print:]] - odgovara bilo kojem znaku koji se može ispisati.
  • [[:punct:]] - odgovara interpunkcijskim znakovima.
  • [[:razmak:]] - znakovi razmaka, posebno - razmak, kartica, znakovi NL, FF, VT, CR.
Možete koristiti posebne klase u ovakvim predlošcima:

$ echo "abc" | awk "/[[:alpha:]]/(ispis $0)" $ echo "abc" | awk "/[[:digit:]]/(ispis $0)" $ echo "abc123" | awk "/[[:digit:]]/(ispiši $0)"


Klase posebnih znakova u regularnim izrazima

Simbol zvijezde

Ako stavite zvjezdicu iza znaka u uzorku, to će značiti da će regularni izraz raditi ako se znak pojavi u nizu bilo koji broj puta - uključujući situaciju kada znaka nema u nizu.

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


Korištenje znaka * u regularnim izrazima

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

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

Pronalaženje riječi s različitim pravopisom

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

Još jedna korisna značajka koja dolazi od simbola zvjezdice je kombiniranje s točkom. Ova kombinacija omogućuje regularnom izrazu da odgovori na bilo koji broj znakova:

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


Predložak koji odgovara na bilo koji broj 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 s klasama znakova:

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


Korištenje zvjezdice s klasama znakova

U sva tri primjera regularni izraz funkcionira jer zvjezdica nakon klase znakova znači da ako se pronađe bilo koji broj znakova "a" ili "e" ili ako se ne pronađe niti jedan, niz će odgovarati zadanom 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 od koristi pri stvaranju vlastitih regularnih izraza.

▍Upitnik

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

$ echo "tet" | awk "/tes?t/(print $0)" $ echo "test" | awk "/tes?t/(ispis $0)" $ echo "testst" | awk "/tes?t/(ispis $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".

Upitnik se također može koristiti s klasama znakova:

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


Upitnik i klase znakova

Ako nema znakova iz klase u retku, ili se jedan od njih pojavljuje jednom, regularni izraz radi, ali čim se u riječi pojave dva znaka, sustav više ne pronalazi podudaranje za uzorak u tekstu.

▍Simbol plus

Znak plus u uzorku 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 odsutnost simbola:

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


Simbol plus u regularnim izrazima

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

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


Znak plus i klase znakova

U tom slučaju, ako redak 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 koji su gore spomenuti, ali vam omogućuju da preciznije odredite potreban broj pojavljivanja simbola koji im prethodi. Ograničenje možete navesti u dva formata:
  • n - broj koji specificira točan broj pretraž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)"

Vitičaste zagrade u obrascima, traženje točnog broja pojavljivanja

U starijim verzijama awk-a morali ste koristiti opciju naredbenog retka --re-interval da bi program prepoznao intervale u regularnim izrazima, ali u novijim verzijama to nije potrebno.

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


Razmak naveden u vitičastim zagradama

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

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

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


Vitičaste zagrade i klase znakova

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

▍logički simbol "ili".

Simbol | - okomita crta znači logično "ili" u regularnim izrazima. Prilikom obrade regularnog izraza koji sadrži nekoliko fragmenata odvojenih takvim znakom, motor će smatrati analizirani tekst prikladnim ako se podudara s bilo kojim od fragmenata. Evo primjera:

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


Logičko "ili" u regularnim izrazima

U ovom primjeru, regularni izraz je konfiguriran za pretraživanje teksta za 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 grupirate određeni niz znakova, sustav će ga percipirati kao običan znak. To jest, na primjer, na njega se mogu primijeniti metaznakovi ponavljanja. 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č "Geeks" je u zagradama, nakon čega slijedi upitnik. Podsjetimo se da upitnik znači "0 ili 1 ponavljanje", tako da će regularni izraz odgovoriti i na niz "Like" i na niz "LikeGeeks".

Praktični primjeri

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

▍Brojanje broja datoteka

Napišimo bash skriptu koja broji datoteke smještene u direktorijima koji su zapisani u varijablu okolina PUT. Kako biste to učinili, prvo ćete morati generirati popis staza direktorija. Učinimo to koristeći sed, zamjenjujući dvotočke razmacima:

$ echo $PATH | sed "s/:/ /g"
Naredba replace podržava regularne izraze kao uzorke za pretraživanje teksta. U ovom slučaju, sve je krajnje jednostavno, tražimo simbol dvotočke, ali nitko nam ne smeta da ovdje koristimo nešto drugo - sve ovisi o konkretnom zadatku.
Sada trebate proći kroz rezultirajući popis u petlji i izvršiti radnje potrebne za brojanje broja datoteka. Opći pregled skripte bit će ovakav:

Mypath=$(echo $PATH | sed "s/:/ /g") za direktorij u $mypath do done
Sada napišimo cijeli tekst skripte, koristeći naredbu ls za dobivanje informacija 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 done
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 datoteka

Glavna vrijednost ovog primjera je da istim pristupom možete riješiti mnogo složenije probleme. Koje točno ovisi o vašim potrebama.

▍Provjera adresa e-pošte

Postoje web stranice s ogromnim zbirkama regularnih izraza koji vam omogućuju provjeru adresa E-mail, brojevi telefona, i tako dalje. Međutim, jedna je stvar uzeti nešto gotovo, a nešto sasvim drugo stvoriti nešto sami. Dakle, napišimo regularni izraz za provjeru adresa e-pošte. Počnimo s analizom izvornih podataka. Evo, na primjer, određene adrese:

[e-mail zaštićen]
Korisničko ime, korisničko ime, može se sastojati od alfanumeričkih i nekih drugih znakova. Naime, ovo je točka, crtica, podvlaka, znak plus. Nakon korisničkog imena slijedi znak @.

Naoružani ovim znanjem, počnimo sastavljati regularni izraz s njegove lijeve strane, koji se koristi za provjeru korisničkog imena. Evo što smo dobili:

^(+)@
Ovaj se regularni izraz može čitati na sljedeći način: "Redak mora započeti barem jednim znakom iz skupine navedenih u uglatim zagradama, nakon čega slijedi znak @."

Sada - red čekanja imena računala - ime računala. Ovdje vrijede ista pravila kao i za korisničko ime, pa će šablon za njega izgledati ovako:

(+)
Naziv domene najviše razine podliježe posebna pravila. Mogu biti samo abecedni znakovi, kojih mora biti najmanje dva (primjerice, takve domene obično sadrže kod države), a ne više od pet. Sve to znači da će predložak za provjeru zadnjeg dijela adrese biti ovakav:

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

Nakon što smo pripremili predloške za pojedinačne dijelove regularnog izraza, sastavimo ih zajedno:

^(+)@(+)\.({2,5})$
Sada preostaje samo testirati što se dogodilo:

$ echo " [e-mail zaštićen]" | awk "/^(+)@(+)\.((2,5))$/(ispis $0)" $ echo " [e-mail zaštićen]" | awk "/^(+)@(+)\.((2,5))$/(ispiši $0)"


Provjera adrese e-pošte korištenjem regularnih izraza

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

Rezultati

Ako vam se regularni izraz za provjeru email adresa na koji ste naišli na samom početku članka tada činio potpuno nerazumljivim, nadamo se da sada više ne izgleda kao besmislen skup znakova. Ako je to stvarno tako, znači ovaj materijal ispunila svoju svrhu. Zapravo, regularni izrazi su tema koju možete proučavati cijeli život, ali čak i ono malo što smo obradili već vam može pomoći u pisanju skripti koje prilično napredno obrađuju tekstove.

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

Poštovani čitatelji! Koristite li regularne izraze pri obradi teksta u skriptama naredbenog retka?

Jedan od najkorisnijih i najbogatijih timova u Linux terminal– naredba “grep”. Grep je akronim koji označava "ispis globalnog regularnog izraza" (to jest, "pretraži posvuda nizove koji odgovaraju regularnom izrazu i ispisi ih"). To znači da se grep može koristiti da se vidi odgovara li unos određenim uzorcima.

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

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

Osnove korištenja

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, on će ispisati svaki redak u datoteci koji sadrži tu riječ.

Kao primjer, možete koristiti grep za pronalaženje redaka koji sadrže riječ "GNU" u verziji 3 GNU Opće javne licence na Ubuntu sustavu.

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 jednu
...
...

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

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

Opće opcije

Prema zadanim postavkama, naredba grep jednostavno traži strogo određene uzorke u ulaznoj datoteci i ispisuje retke koje pronađe. Međutim, ponašanje grepa može se promijeniti dodavanjem nekih dodatnih oznaka.

Ako trebate zanemariti velika i mala slova parametra pretraživanja i tražiti varijacije uzorka i za velika i za mala slova, možete koristiti pomoćne programe "-i" ili "--ignore-case".

Kao primjer, možete koristiti grep za pretraživanje iste datoteke za riječ "licenca" napisanu velikim, malim ili miješanim slovima.

grep -i "licenca" GPL-3
GNU OPĆA JAVNA LICENCA
ovog licencnog dokumenta, ali nije dopušteno njegovo mijenjanje.
GNU Opća javna licenca je besplatna, copyleft licenca za
Osmišljene su licence za većinu softvera i drugih praktičnih radova
GNU Opća javna licenca ima za cilj jamčiti vašu slobodu da
GNU Opća javna licenca za većinu našeg softvera; također se odnosi na


"Ova licenca" odnosi se na verziju 3 GNU Opće javne licence.
"Program" se odnosi na bilo koji rad zaštićen autorskim pravom licenciran prema ovome
...
...

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

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

grep -v "the" BSD
Sva prava pridržana.
Preraspodjela i korištenje u izvornom i binarnom obliku, sa ili bez
su upoznati:
može se koristiti za podržavanje ili promoviranje proizvoda izvedenih iz ovog softvera
bez posebne prethodne pismene dozvole.
OVAJ SOFTVER PRUŽAJU REGENTI I SURADNICI ``KAKAV JEST" ​​I
BILO KOJA IZRIČITA ILI POSREDNA JAMSTVA, UKLJUČUJUĆI, ALI NE OGRANIČENO NA,
...
...

Kao što vidite, posljednja dva retka ispisana su kao da ne sadrže riječ "the" jer naredba "ignore case" nije korištena.

Uvijek je korisno znati brojeve redaka 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 pridržana.
3:
4:Redistribucija i korištenje u izvornom i binarnom obliku, sa ili bez
6:su ispunjeni:
13: može se koristiti za podržavanje ili promoviranje proizvoda izvedenih iz ovog softvera
14: bez posebne prethodne pismene dozvole.
15:
16: OVAJ SOFTVER DAJU REGENTI I SURADNICI ``KAKAV JEST" ​​I
17: BILO KOJA IZRIČITA ILI POSREDNA JAMSTVA, UKLJUČUJUĆI, ALI NE OGRANIČENO NA,
...
...

Sada se možete pozvati na broj retka kada trebate izvršiti promjene u svakom retku koji ne sadrži "the".

Regularni izrazi

Kao što je spomenuto u uvodu, grep je kratica za "ispis globalnog regularnog izraza". Regularni izraz je tekstualni niz koji opisuje određeni uzorak pretraživanja.

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

Podudaranje slova

U gornjim primjerima traženja riječi "GNU" i "the", traženi su vrlo jednostavni regularni izrazi koji točno odgovaraju nizu znakova "GNU" i "the".

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

Uzorci koji točno odgovaraju zadanim znakovima nazivaju se "slovnim" uzorcima jer odgovaraju uzorku slovo po slovo, znak po znak.

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

Sidrene utakmice

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

Na primjer, možete odrediti da pretraživanje treba samo retke koji sadrže riječ "GNU" na samom početku. Da biste to učinili, trebate upotrijebiti sidro “^” prije niza slova.

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

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

Isto tako, sidro "$" može se koristiti nakon doslovnog niza da bi se označilo da je podudaranje valjano samo ako je niz znakova koji se pretražuje na kraju tekstualnog niza.

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

grep "i$" GPL-3
da nema jamstva za ovaj besplatni softver. Za oba korisnika" i
Precizni uvjeti i odredbe za umnožavanje, distribuciju i


alternativa je dopuštena samo povremeno i nekomercijalno, i
mreža može biti odbijena kada je sama izmjena materijalno i
nepovoljno utječe na rad mreže ili krši pravila i
privremeno, osim ako i dok nositelj autorskog prava izričito i
prima licencu od izvornih davatelja licence za pokretanje, izmjenu i
izrađivati, koristiti, prodavati, nuditi na prodaju, uvoziti i na drugi način pokretati, modificirati i

Odgovara bilo kojem liku

Točka (.) se koristi u regularnim izrazima za označavanje da se bilo koji znak može pojaviti na određenom mjestu.

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

grep "..cept" GPL-3
uporabe, što je upravo tamo gdje je najneprihvatljivije. Stoga, mi
kršenje važećih zakona o autorskim pravima, osim izvršenja na a
govori korisniku da nema jamstva za rad (osim na

oblik posebno pisane licence ili navedene kao iznimke;
Ne smijete širiti ili mijenjati pokriveno djelo osim na izričit način
9. Prihvaćanje nije potrebno za posjedovanje kopija.
...
...

Kao što vidite, rezultati uključuju riječi "prihvatiti" i "osim", kao i varijacije tih riječi. Uzorak bi također odgovarao nizu "z2cept" da je u tekstu.

Izrazi u zagradama

Postavljanjem grupe znakova unutar uglatih zagrada (""), možete označiti da se bilo koji od znakova u zagradama može pojaviti na tom mjestu.

To znači da ako trebate pronaći nizove koji sadrže "previše" ili "dva", možete ukratko označiti te varijacije pomoću sljedećeg uzorka:

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

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

Odgovarajući izvor s mrežnog poslužitelja bez naknade.
...
...

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

Stavljanje znakova u zagrade također pruža nekoliko korisnih značajki. Možete označiti da sve osim znakova u zagradama odgovara uzorku tako da popis znakova u zagradama započnete znakom “^”.

Ovaj primjer koristi uzorak ".ode", koji ne smije odgovarati nizu "code".

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

Vrijedno je napomenuti da izlaz u drugom retku sadrži riječ "kod". Ovo nije regex ili grep pogreška.

Umjesto toga, ovaj je redak ispisan jer također sadrži slijed za podudaranje uzorka "mode" koji se nalazi u riječi "model". Odnosno, niz je ispisan jer odgovara uzorku.

Još jedan korisna značajka zagrade - mogućnost određivanja niza znakova umjesto unosa svakog znaka zasebno.

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

grep "^" GPL-3
GNU Opća javna licenca za većinu našeg softvera; također se odnosi na

Licenca. Svaki nositelj licence oslovljava se s "vi". "Licence" i


Knjižnice sustava ili alati opće namjene ili općenito dostupni besplatni
Izvor.

...
...

Zbog nekih inherentnih problema s uspoređivanjem, za točnije rezultate bolje je koristiti POSIX klase znakova umjesto raspona znakova korištenog u gornjem primjeru.
Postoje mnoge klase znakova koje nisu obuhvaćene ovim priručnikom; na primjer, za izvođenje iste procedure kao u gornjem primjeru, možete koristiti klasu znakova "[:upper:]" u zagradama.

grep "^[[:gornji:]]" GPL-3
GNU Opća javna licenca za većinu našeg softvera; također se odnosi na
Države ne bi trebale dopustiti da patenti ograničavaju razvoj i upotrebu
Licenca. Svaki nositelj licence oslovljava se s "vi". "Licence" i
Komponenta, a (b) služi samo da omogući korištenje djela s tim
Glavna komponenta ili za implementaciju standardnog sučelja za koje je
Knjižnice sustava ili alati opće namjene ili općenito dostupni besplatni
Izvor.
Korisnički proizvod prenosi se primatelju trajno ili za a
...
...

Ponovi uzorak (0 ili više puta)

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

Na primjer, ako želite pronaći svaki redak s otvarajućim ili zatvarajućim zagradama koji sadrže samo slova i jednostruke razmake između njih, možete upotrijebiti sljedeći izraz:

grep "(*)" GPL-3

distribucija (sa ili bez izmjene), stavljanje na raspolaganje
nego djelo u cjelini, to (a) je uključeno u normalan oblik
Komponenta, a (b) služi samo da omogući korištenje djela s tim
(ako postoji) na kojem se izvodi izvršni rad ili prevodilac
(uključujući fizički distribucijski medij), popraćen
(uključujući fizički distribucijski medij), popraćen a
mjestu (besplatno ili uz naplatu) i ponuditi ekvivalentan pristup
...
...

Kako izbjeći metakaraktere

Ponekad ćete možda trebati potražiti doslovnu točku ili doslovnu otvorenu zagradu. Budući da ovi znakovi imaju specifično značenje u regularnim izrazima, trebate ih "izbjeći" govoreći grep-u da njihovo posebno značenje nije potrebno u ovom slučaju.

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

Na primjer, ako trebate pronaći niz koji počinje velikim slovom i završava točkom, možete upotrijebiti izraz u nastavku. Obrnuta kosa crta prije zadnje točke govori naredbi da je "izbjegne", tako da zadnja točka predstavlja doslovnu točku i nema značenje "bilo koji znak":

grep "^.*\.$" GPL-3
Izvor.
Licencirajte izuzeći od jednog ili više uvjeta.
Licenca bi značila potpuno suzdržavanje od prenošenja Programa.
SVI POTREBNI SERVISI, POPRAVCI ILI POPRAVCI.
TAKVE ŠTETE.
Također dodajte informacije o tome kako vas kontaktirati elektroničkom i papirnatom poštom.

Napredni regularni izrazi

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

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

Grupiranje

Jedna od najjednostavnijih i najkorisnijih značajki koje pružaju prošireni regularni izrazi je mogućnost grupiranja izraza i njihove upotrebe kao jedne jedinice.

Zagrade se koriste za grupiranje izraza. Ako trebate koristiti zagrade izvan proširenih regularnih izraza, oni se mogu "izbjeći" koristeći obrnutu kosu crtu

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

Gornji izrazi su ekvivalentni.

Alternacija

Baš kao što uglate zagrade specificiraju različita moguća podudaranja za jedan znak, isprepletanje vam omogućuje da odredite alternativna podudaranja za nizove znakova ili skupove izraza.

Simbol okomite trake "|" koristi se za označavanje izmjene. Alternacija se često koristi u grupiranju 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 "Opću javnu licencu":

grep -E "(GPL|Opća javna licenca)" GPL-3
GNU Opća javna licenca je besplatna, copyleft licenca za
GNU Opća javna licenca ima za cilj jamčiti vašu slobodu da
GNU Opća javna licenca za većinu našeg softvera; također se odnosi na
cijena. Naše opće javne licence osmišljene su kako bi osigurale 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
dizajnirali su ovu verziju GPL-a kako bi zabranili praksu za one
...
...

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

Kvantifikatori

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

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

U ovom primjeru, umetanjem niza "copy" u izbornu grupu, prikazuju se podudaranja "copyright" i "right":

grep -E "(kopirati)? desno" GPL-3
Autorska prava (C) 2007 Free Software Foundation, Inc.
Kako bismo zaštitili vaša prava, moramo spriječiti druge da vas uskrate
ova prava ili tražiti da se odreknete prava. Stoga, imate
znaju svoja prava.
Programeri koji koriste GNU GPL štite vaša prava u dva koraka:
(1) potvrditi autorsko pravo na softver i (2) ponuditi vam ovu Licencu
"Autorsko pravo" također znači zakone slične autorskom pravu koji se primjenjuju na druge vrste
...
...

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

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

grep -E "slobodan[^[:razmak:]]+" GPL-3
GNU Opća javna licenca je besplatna, copyleft licenca za
oduzeti vam slobodu da dijelite i mijenjate djela. Po kontrastu,
GNU Opća javna licenca ima za cilj jamčiti vašu slobodu da
Kada govorimo o slobodnom softveru, mislimo na slobodu, a ne na slobodu
imaju slobodu distribuirati kopije besplatnog softvera (i naplaćivati

slobode koje ste dobili. Morate se pobrinuti da i oni prime
zaštita korisnika" sloboda mijenjanja softvera. Sustavno
GPL-a, prema potrebi za zaštitu slobode korisnika.
patenti se ne mogu koristiti za pretvaranje programa u neslobodne.

Broj ponovljenih utakmica

Ako trebate navesti koliko se puta podudaranja trebaju ponoviti, možete upotrijebiti vitičaste zagrade ("( )"). Ovi se simboli koriste za označavanje točnog broja, raspona te gornje i donje granice broja podudaranja izraza.

Ako trebate pronaći sve retke koji sadrže kombinaciju triju samoglasnika, možete upotrijebiti sljedeći izraz:

grep -E "(3)" GPL-3
promijenili, kako se njihovi problemi ne bi pogrešno pripisivali
autori prethodnih verzija.
primite ga, u bilo kojem mediju, pod uvjetom da uočljivo i
dati prema prethodnom stavku, plus pravo na posjed nad
pokriveni rad kako biste istovremeno zadovoljili svoje obveze 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 to modificirate: odgovornosti za poštivanje slobode drugih.
c) Zabranu pogrešnog predstavljanja podrijetla tog materijala, ili

zaključke

U mnogim je slučajevima naredba grep korisna za pronalaženje uzoraka unutar datoteka ili u hijerarhiji sustav datoteka. Štedi puno vremena, pa se isplati upoznati s njegovim parametrima i sintaksom.

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

Štoviše, napredni programski jezici koriste regularne izraze za izvršavanje procedura na određenim dijelovima podataka. Poznavanje rada s regularnim izrazima korisno je pri rješavanju uobičajenih problema povezanih s računalom.

Oznake: ,

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 regularni izrazi zovu u slengu) ogromna u opsegu jednog posta. Stoga ću pokušati ukratko, ali što jasnije sabrati svoja razmišljanja i prenijeti vam ih u .

Dopustite mi da počnem tako što ću reći da postoji nekoliko vrsta regularnih izraza:

1. Tradicionalni regularni izrazi(oni su također osnovni, osnovni i osnovni regularni izrazi(BRE))

  • Sintaksa ovih izraza je definirana kao zastarjela, ali je unatoč tome još uvijek široko rasprostranjena i koristi je u mnogim UNIX uslužnim programima
  • Osnovni regularni izrazi uključuju sljedeće metakaraktere (više o njihovim značenjima u nastavku):
    • \( \) - početna verzija za ( ) (u proširenom)
    • \(\) - početna verzija za () (u proširenom)
    • \n, Gdje n- brojevi od 1 do 9
  • Značajke korištenja ovih metakaraktera:
    • Zvjezdica mora slijediti izraz koji odgovara jednom znaku. Primjer: *.
    • Izraz \( blok\)* treba smatrati netoč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 uglavnom se zanemaruju. Posebni slučajevi:
    • Da biste dodali znak ^ skupu, on ne smije biti prvi tamo.
    • Da biste dodali znak - u skup, on mora biti tamo prvi ili zadnji. Na primjer:
      • DNS predložak imena, koji može sadržavati slova, brojeve, minus i točku: [-0-9a-zA-Z.] ;
      • bilo koji znak osim minusa i brojeva: [^-0-9] .
    • Da biste dodali znak [ ili ] skupu, prvo ga morate tamo postaviti. Na primjer:
      • odgovara ], [, a ili b.

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

  • Sintaksa ovih izraza slična je sintaksi glavnih izraza, s izuzetkom:
    • Uklonjena je upotreba obrnutih kosih crta za metaznakove ( ) i ().
    • Obrnuta kosa crta prije metaznaka nadjačava njegovo posebno značenje.
    • Teoretski odbijeno neregularan oblikovati\ n .
    • Dodani metaznakovi + , ? , | .

3. Regularni izrazi kompatibilni s Perlom(oni su Perl-kompatibilni regularni izrazi(PCRE))

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

Regularni izrazi Sastoji se odšablone, odnosno postaviti predložak traži. Predložak se sastoji iz pravila pretrage, koje se sastoje od likovi I metaznakovi.

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

Nabrajanje |

Cijev (|) razdvaja valjane opcije, moglo bi se reći - logično ILI. Na primjer, "sivo|sivo" odgovara siva ili siva.

Grupa ili unija()

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

Kvantificiraj()? * +

Kvantifikator nakon što lik ili grupa odredi koliko puta prethodnik može doći do izražaja.

opći izraz, ponavljanja mogu biti od m do n uključivo.

opći izraz m ili više ponavljanja.

opći izraz ne više od n ponavljanja.

glatko, nesmetanon ponavljanja.

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

Zvijezda sredstva 0, 1 ili bilo koji broj jednom ( {0,} ). Na primjer, "go*gle" odgovara ggle, Google, google i tako dalje.

Plus sredstva najmanje 1 jednom ( {1,} ). Na primjer, "go+gle" odgovara Google, google itd. (ali ne ggle).

Točna sintaksa ovih regularnih izraza ovisi o implementaciji. (odnosno u osnovni regularni izrazi simboli (i)- izbjegnuto obrnutom kosom crtom)

Metakarakteri, pojednostavljeno rečeno, simboli koji ne odgovaraju svom stvarnom značenju, odnosno simbolu. (točka) nije točka, već bilo koji znak, itd. Upoznajte se s metakarakterima i njihovim značenjima:

. odgovara sama bilo koji simbol
[nešto] Sukladan bilo koji pojedinačni znak od onih u zagradama. U ovom slučaju: Znak “-” tumači se doslovno samo ako se nalazi neposredno nakon otvaranja ili prije zatvaranja zagrade: ili [-abc]. U suprotnom, označava interval znakova. Na primjer, odgovara "a", "b" ili "c". odgovara malim slovima latinične abecede. Ove se oznake mogu kombinirati: odgovara a, b, c, q, r, s, t, u, v, w, x, y, z. Za podudaranje znakova "[" ili "]" dovoljno je da zatvorena zagrada bila je prvi znak nakon početnog znaka: odgovara "]", "[", "a" ili "b". Ako vrijednosti u uglatim zagradama prethodi znak ^, tada vrijednost izraza odgovara pojedinačni znak među onima koji nisu u zagradi. Na primjer, [^abc] odgovara bilo kojem znaku osim "a", "b" ili "c". [^a-z] odgovara bilo kojem znaku osim malih slova u latiničnoj abecedi.
^ Odgovara početku teksta (ili početku bilo kojeg retka ako je način redak po redak).
$ Odgovara kraju teksta (ili kraju bilo kojeg retka ako je način redak po redak).
\(\) ili () Deklariše "označeni podizraz" (grupirani izraz) koji se može koristiti kasnije (pogledajte sljedeći element: \ n). "Označeni podizraz" također je "blok". Za razliku od drugih operatora, ovaj (u tradicionalnoj sintaksi) zahtijeva obrnutu kosu crtu; u proširenom i Perlu znak \ nije potreban.
\n Gdje n- ovo je broj od 1 do 9; odgovara n označeni podizraz (na primjer (abcd)\0, odnosno znakovi abcd označeni su nulom). Ovaj dizajn je teoretski neregularan, nije prihvaćen u sintaksi proširenog regularnog izraza.
*
  • Zvijezda 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 znamenka 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 "*" trebao bi se smatrati nezakonitim. U nekim slučajevima odgovara nula ili više pojavljivanja niza koji je bio u zagradama. U drugima se podudara s izrazom u zagradama, s obzirom na znak "*".

\{x,g\} Odgovara posljednjem ( Nadolazeći) blok koji se javlja najmanje x i nema više g 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 kojih znakova između dva dijela regularnog izraza.

Metaznakovi nam pomažu u korištenju različitih podudaranja. Ali kako metakarakter možemo prikazati kao običan znak, odnosno simbol [ (uglata zagrada) sa značenjem uglate zagrade? Samo:

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

Radi pojednostavljenja definicije nekih skupova znakova, oni su spojeni u tzv. klase i kategorije likova. POSIX je standardizirao deklaraciju određenih klasa i kategorija znakova, kao što je prikazano u sljedećoj tablici:

POSIX klasa na sličan način oznaka
[:Gornji:] velika slova
[:niži:] mala slova
[:alfa:] velika i mala slova
[:alnum:] brojevi, velika i mala slova
[:broj:] brojevima
[:xdigit:] heksadecimalne znamenke
[:punct:] [.,!?:…] interpunkcijski znakovi
[:prazan:] [\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 brtve i simboli preskoka

U regularnom izrazu postoji nešto poput:

Regularni izraz pohlepe

Pokušat ću to opisati što jasnije. Recimo da želimo pronaći sve HTML oznake u nekom tekstu. Nakon što smo lokalizirali problem, želimo pronaći vrijednosti koje se nalaze između< и >, zajedno s tim istim zagradama. Ali znamo da oznake imaju različite duljine i da ih ima najmanje 50. Nabrajanje svih njih, umetanje u metasimbole, previše je dugotrajan zadatak. Ali znamo da imamo izraz.* (točka zvjezdica), koji karakterizira bilo koji broj bilo kojeg znaka u retku. Pomoću dati izraz pokušat ćemo pronaći u tekstu (

Tako, Kako stvoriti RAID razina 10/50 na LSI MegaRAID kontroleru (važno i za: Intel SRCU42x, Intel SRCS16):

) sve vrijednosti između< и >. Kao rezultat, CIJELI redak će odgovarati ovom izrazu. zašto, jer je regex POHLEPAN i pokušava uhvatiti SVE brojeve znakova između< и >, odnosno cijeli red, počevši < p>Dakle... i završetak ...> će pripadati ovom pravilu!

Nadam se da ovaj primjer razjašnjava što 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:
    • *? - "nepohlepan" ("lijeni") ekvivalent *
    • +? - "nepohlepan" ("lijen") ekvivalent +
    • (n,)? - "nepohlepan" ("lijen") ekvivalent (n,)
    • .*? - "nepohlepan" ("lijen") ekvivalent.*

Htio bih dodati na sve navedeno sintaksa proširenog regularnog izraza:

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

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

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

Okomita traka dijeli alternativne opcije regularni izrazi. Jedan znak označava dvije alternative, ali može ih biti više, samo koristite više okomitih crta. Važno je zapamtiti da ovaj operator koristi što je moguće više izraza. Zbog toga se alternativni operator najčešće koristi unutar zagrada.

Također je ukinuta upotreba obrnutih kosih crta: \(…\) postaje (…) i \(…\) postaje (…).

Za kraj posta dat ću nekoliko primjera korištenja regularnog 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, u redovima gdje se nalazi r 2 pear $ grep "a.." text1 # redovi s a iza kojeg slijede najmanje 2 znaka 1 jabuka 3 banana $ grep "" text1 # traži retke koji sadrže 3 ili p 1 jabuka 2 kruška 3 banana $ echo -e "pronađi\n* ovdje\nnegdje." | grep "[.*]" * ovdje negdje..ime]$ echo -e "123\n456\n789\n0" | grep "" 123,456,789 $ sed -e "/\(a.*a\)\|\(p.*p\)/s/a/A/g" text1 # zamijeni a s A u svim redovima gdje dolazi nakon a a ili iza p dolazi p 1 jabuka 2 kruška 3 bAnAnA *\./ POSLJEDNJA RIJEČ./g" Prvo. POSLJEDNJA RIJEČ. Ovo je POSLJEDNJA RIJEČ.

Srdačan pozdrav, McSim!

grep je kratica za 'globalni pisač regularnih izraza'. grep reže linije koje trebate tekstualne datoteke koji sadrže tekst definiran od strane korisnika.

grep se može koristiti na dva načina - sam ili u kombinaciji s tokovima.

grep ima vrlo opsežnu funkcionalnost zbog velikog broja opcija koje podržava, kao što su: pretraživanje pomoću uzorka niza ili uzorka regularnog izraza RegExp ili regularnih izraza temeljenih na perlu, itd.

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

grep opcije

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

Postoje modifikacije uslužnog programa grep: egrep (s proširenom obradom regularnih izraza), fgrep (koji simbole $*^|()\ tretira kao literale, tj. doslovno), rgrep (s 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] restricted_regex_BRE [datoteka ...]

Naredba grep uspoređuje retke u izvornim datotekama s uzorkom koji specificira limited_regex. Ako nije navedena nijedna datoteka, koristi se standardni unos. Obično se svaki uspješno upareni niz kopira u standardni izlaz; ako postoji nekoliko izvornih datoteka, ime datoteke se navodi prije pronađenog retka. grep koristi kompaktan, nedeterministički algoritam. Ograničeni regularni izrazi (izrazi koji imaju nizove znakova sa svojim značenjima i koriste ograničeni skup alfanumeričkih i posebnih znakova) percipiraju se kao predlošci. Imaju isto značenje kao regularni izrazi u izd.

Da biste izbjegli znakove $, *, , ^, |, () i \ iz interpretacije ljuske, najlakše je staviti constrained_regex u jednostruke navodnike.

Mogućnosti:

B Pred svaki red stavlja broj bloka u kojem je pronađen. Ovo može biti korisno kada tražite blokove prema kontekstu (blokovi su numerirani počevši od 0). -c Ispisuje samo broj redaka koji sadrže uzorak. -h Sprječava ispis naziva datoteke koji sadrži odgovarajući redak prije samog retka. Koristi se prilikom pretraživanja više datoteka. -i Zanemaruje velika i mala slova pri usporedbi. -l Ispisuje samo nazive datoteka koje sadrže odgovarajuće nizove, jedan po retku. Ako se uzorak pronađe u više redaka datoteke, naziv datoteke se ne ponavlja. -n Ispisuje prije svakog retka njegov broj u datoteci (redovi su numerirani počevši od 1). -s Potiskuje poruke o nepostojećim ili nečitljivim datotekama. -v Ispisuje sve retke osim onih koji sadrže uzorak. -w Pretražuje izraz kao riječ, kao da je okružen metaznakovima \< и \>.

grep --pomoć

Upotreba: grep [OPCIJA]... UZORAK [DATOTEKA]... Traži UZORAK u svakoj DATOTECI ili standardnom unosu. Prema zadanim postavkama, PATTERN je jednostavan regularni izraz (BRE). Primjer: grep -i "hello world" menu.h main.c Odabir vrste regularnog izraza i njegove interpretacije: -E, --extended-regexp PATTERN - prošireni regularni izraz (ERE) -F, --fixed-regexp PATTERN - nizovi fiksne duljine, odvojeni znakom novog retka -G, --basic-regexp UZORAK - jednostavan regularni izraz (BRE) -P, --perl-regexp UZORAK - Perl regularni izrazi -e, --regexp=UZORAK koriste UZORAK za pretraživanje - f, --file=DATOTEKA uzmi UZORAK iz DATOTEKE -i, --ignore-case zanemari razliku velikih i malih slova -w, --word-regexp UZORAK mora odgovarati svim riječima -x, --line-regexp UZORAK mora odgovarati cijelom redu -z, --null-data linije odvojene su null-bajtom umjesto znakom za završetak retka. Razno: -s, --no-messages potiskuju poruke o pogrešci -v, --revert-match odaberite neusklađene linije -V, - - verzija ispis informacija o verziji i izlaz --help prikaži ovu pomoć i izlaz --mmap za kompatibilnost unatrag, ignorirano Kontrola izlaza: -m, --max-count=BROJ zaustavljanje nakon navedenog BROJA podudaranja -b, --byte-offset ispis pomaka bajta zajedno s izlaznim linijama -n, --line-number ispis retka broj zajedno s izlaznim redcima --line-buffered isprazni međuspremnik nakon svakog retka -H, --with-filename ispis naziva datoteke za svako podudaranje -h, --no-filename ne pokreći izlaz s nazivom datoteke -- label=LABEL koristi LABEL kao naziv datoteke za standardni unos -o, --only-matching prikaži samo dio retka koji se podudara s PATTERN -q, --quiet, --silent potisnu sav normalan izlaz --binary-files=TYPE pretpostaviti da binarna datoteka ima TIP: binarni, tekstualni ili bez podudaranja. -a, --text isto kao --binary-files=tekst -I isto kao --binary-files=without-match -d, --directories=ACTION kako rukovati direktorijima ACTION se može čitati ), rekurzivno (rekurzivno) ili preskočiti (preskočiti). -D, --devices=ACTION kako rukovati uređajima, FIFO i utičnicama ACTION se može pročitati ili preskočiti -R, -r, --recursive isto kao --directories=recurse --include=F_PATTERN obraditi samo datoteke koje se podudaraju pod F_TEMPLATE - -exclude=F_TEMPLATE preskoči datoteke i direktorije koji odgovaraju F_TEMPLATE --exclude-from=FILE preskoči datoteke koje odgovaraju datotekama predloška iz FILE --exclude-dir=TEMPLATE direktorije koji odgovaraju PATTERN bit će preskočeni -L, - -files-without-match ispis samo Imena DATOTEKA bez podudaranja -l, --files-with-matches ispisuje samo imena DATOTEKA s podudaranjima -c, --count ispisuje samo broj odgovarajućih redaka po DATOTECI -T, --initial-tab align tab (ako je potrebno) - Z, --null ispis bajta 0 nakon naziva DATOTEKE Upravljanje kontekstom: -B, --before-context=NUM ispis BROJ redaka prethodnog konteksta -A, --after-context=NUM ispis BROJ redaka sljedeći kontekst -C, --context[=BROJ] ispis BROJ redaka konteksta -BROJ je isti kao --context=BROJ --color[=WHEN], --colour[=WHEN] koristi oznake za razlikovanje podudaranja linije; WHEN može biti uvijek, nikad ili automatski -U, --binary ne uklanja CR znakove na kraju retka (MSDOS) -u, --unix-byte-offsets pokazuju pomak kao da nema CR-ova (MSDOS ) Umjesto “egrep”, trebalo bi pokrenuti “grep -E”. "grep -F" se pretpostavlja umjesto "fgrep". Bolje je ne pokretati kao "egrep" ili "fgrep". Kada FILE nije naveden ili kada je FILE -, čita se standardni unos. Ako je navedeno manje od dvije datoteke, pretpostavlja se -h. Ako se pronađe podudaranje, izlazni kod će biti 0, a ako ne 1. Ako se pojave greške ili ako opcija -q nije navedena, izlazni kod će biti 2. Prijavite pogreške na: Molimo prijavite pogreške u prijevodu na: GNU Grep početna stranica: Pomoć za rad s GNU programima: