S terminalom: Korištenje regularnih izraza

Jedna od stvari koju sam oduvijek volio na Linux terminalu je ono što se može postići korištenjem regularnih izraza. Bez obzira trebamo li pronaći komplicirani tekst ili ga zamijeniti nečim drugim, upotreba regularnih izraza može uvelike pojednostaviti posao. Krenimo od početka:

UPOZORENJE: Ovaj je post bol u dupetu. Stalno čitanje ovog posta može prouzročiti gubitak svijesti. Napravite pauze između njih ili pitajte svog liječnika ili ljekarnika prije nego što pročitate cijeli članak.

Što je regularni izraz?

Regularni izraz je niz posebnih znakova koji nam omogućuju opisivanje teksta koji želimo pronaći. Na primjer, ako bismo željeli tražiti riječ "linux", bilo bi dovoljno da tu riječ stavimo u program koji koristimo. Sama riječ je redoviti izraz. Zasad se čini vrlo jednostavno, ali što ako želimo pronaći sve brojeve u određenoj datoteci? Ili svi redovi koji počinju velikim slovom? U tim slučajevima više ne možete staviti jednostavnu riječ. Rješenje je uporaba regularnog izraza.

Regularni izrazi nasuprot obrascima datoteka.

Prije nego što uđem u regularne izraze, želim razjasniti uobičajeni nesporazum oko regularnih izraza. Regularni izraz nije ono što stavljamo kao parametar u naredbe poput rm, cp itd. Za upućivanje na razne datoteke na tvrdom disku. To bi bio obrazac datoteke. Regularni izrazi, iako slični jer koriste neke uobičajene znakove, različiti su. Uzorak datoteke aktivira se prema datotekama na tvrdom disku i vraća one koje se u potpunosti podudaraju s uzorkom, dok se regularni izraz aktivira prema tekstu i vraća retke koji sadrže traženi tekst. Na primjer, regularni izraz koji odgovara uzorku *.* bilo bi nešto poput ^.*\..*$

Vrste regularnih izraza.

Ne koriste svi programi iste regularne izraze. Ne puno manje. Postoji nekoliko više ili manje standardnih tipova regularnih izraza, ali postoje programi koji malo mijenjaju sintaksu, uključuju vlastita proširenja ili čak koriste potpuno različite znakove. Stoga, kada želite koristiti regularne izraze s programom koji ne poznajete dobro, prvo što trebate učiniti je pogledati priručnik ili dokumentaciju programa da biste vidjeli kakvi su regularni izrazi koje prepoznaje.

Prvo, postoje dvije glavne vrste regularnih izraza koje sadrži POSIX standard, a to je ono što Linux alati koriste. Oni su osnovni i prošireni regularni izrazi. Mnoge naredbe koje rade s regularnim izrazima, poput grep ili sed, omogućuju vam upotrebu ove dvije vrste. O njima ću govoriti u nastavku. Postoje i regularni izrazi u PERL stilu, a zatim postoje programi poput vim ili emacs koji koriste njihove varijante. Ovisno o tome što želimo učiniti, možda je prikladnije koristiti jedno ili drugo.

Testiranje regularnih izraza.

Sintaksa regularnih izraza nije ništa trivijalno. Kad moramo napisati komplicirani regularni izraz, nalazit ćemo se pred nizom posebnih znakova koje je na prvi pogled nemoguće razumjeti, pa je za naučiti kako ih koristiti neophodno imati način za obavljanje svih testova koje želimo i lako vidjeti rezultate. Zbog toga ću sada staviti nekoliko naredbi pomoću kojih možemo raditi testove i eksperimentirati sve što nam treba dok ne dominiramo regularnim izrazima.

Prva je grep naredba. To je naredba koju ćemo najčešće koristiti za pretraživanja. Sintaksa je sljedeća:

grep [-E] 'REGEX' FICHERO
COMANDO | grep [-E] 'REGEX'

Preporučujem uvijek stavljanje regularnih izraza u pojedinačne navodnike kako nas ljuska ne bi poludila. Prvi način je pronaći regularni izraz u datoteci. Drugi omogućuje filtriranje izlaza naredbe kroz regularni izraz. Prema zadanim postavkama grep koristi osnovne regularne izraze. Opcija -E je za upotrebu proširenih regularnih izraza.

Trik koji nam može pomoći da vidimo kako funkcioniraju regularni izrazi je omogućavanje upotrebe boje u naredbi grep. Na taj će način biti istaknut dio teksta koji odgovara regularnom izrazu koji koristimo. Da biste aktivirali boju u naredbi grep, samo provjerite je li varijabla okoline GREP_OPTIONS sadrže u vrijednosti --color, što se može učiniti ovom naredbom:

GREP_OPTIONS=--color

Možemo ga staviti u .bashrc da ga uvijek aktiviramo.

Drugi način korištenja regularnih izraza je upotrebom naredbe sed. Ovo je prikladnije za zamjenu teksta, ali se može koristiti i za pretraživanje. Sintaksa bi bila sljedeća:

sed -n[r] '/REGEX/p' FICHERO
COMANDO | sed -n[r] '/REGEX/p'

Naredba sed također koristi osnovne regularne izraze prema zadanim postavkama, a možete koristiti proširene regularne izraze s opcijom -r.

Još jedna naredba koju također želim imenovati je awk. Ova se naredba može koristiti za mnoge stvari, jer vam omogućuje pisanje skripti na vašem vlastitom programskom jeziku. Ako ono što želimo jest traženje regularnog izraza u datoteci ili u izlazu naredbe, način na koji bi se koristio bio bi sljedeći:

awk '/REGEX/' FICHERO
COMANDO | awk '/REGEX/'

Ova naredba uvijek koristi proširene regularne izraze.

Za naše testove trebat će nam i tekst koji služi kao primjer za pretraživanje u njemu. Možemo se poslužiti sljedećim tekstom:

- Lista de páginas wiki:

ArchLinux: https://wiki.archlinux.org/
Gentoo: https://wiki.gentoo.org/wiki/Main_Page
CentOS: http://wiki.centos.org/
Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/

- Fechas de lanzamiento:

Arch Linux: 11-03-2002
Gentoo: 31/03/2002
CentOs: 14-05-2004 03:32:38
Debian: 16/08/1993
Ubuntu: 20/10/2004

Desde Linux Rulez.

Ovo je tekst koji ću koristiti za primjere u ostatku posta, pa preporučujem da ga kopirate u datoteku kako bi vam bio pri ruci s terminala. Možete staviti ime koje želite. Nazvao sam ga regularnim izrazom.

Početna lekcija.

Sada imamo sve što je potrebno za započinjanje testiranja regularnih izraza. Idemo malo po malo. Navest ću nekoliko primjera pretraživanja s regularnim izrazima u kojima ću objasniti čemu služi svaki lik. Nisu baš dobri primjeri, ali budući da ću imati vrlo dugačak post, ne želim ga više komplicirati. A ja ću samo ogrebati površinu onoga što se može učiniti regularnim izrazima.

Najjednostavnije od svega je traženje određene riječi, na primjer, pretpostavimo da želimo tražiti sve retke koji sadrže riječ "Linux". Ovo je najlakše, jer moramo samo napisati:

grep 'Linux' regex

I možemo vidjeti rezultat:

SvodLinux: https://wiki.archlinux.org/ Arch Linux: 11-03-2002 Od Linux Rulez.

To su tri retka koji sadrže riječ "Linux" koja će, ako smo koristili trik u boji, biti istaknuta. Imajte na umu da prepoznaje riječ koju tražimo čak i ako je dio duže riječi kao u "ArchLinux". Međutim, ne ističe riječ "linux" koja se pojavljuje u URL-u "https://wiki.archlinux.org/". To je zato što se tamo pojavljuje s malim slovom "l" i tražili smo ga s velikim slovom. Naredba grep ima mogućnosti za to, ali neću o njima govoriti u članku koji se bavi regularnim izrazima.

Ovim jednostavnim testom možemo izvući prvi zaključak:

  • Normalni znak stavljen u regularni izraz poklapa se sam sa sobom.

Što će reći da ako stavite slovo "a", tražit će slovo "a". Čini se logičnim, zar ne? 🙂

Sad pretpostavimo da želimo tražiti riječ "CentO" iza koje slijedi bilo koji znak, ali samo jedan znak. Za to možemo koristiti znak ".", Koji je zamjenski znak koji odgovara bilo kojem znaku, ali samo jednom:

grep 'CentO.' regex

A rezultat je:

CentOS: http://wiki.centos.org/
centi: 14-05-2004 03:32:38

Što znači da uključuje "S" u "CentOS-u", iako je u jednom slučaju veliko, a u drugom malom. Ako bi se na tom mjestu pojavio bilo koji drugi lik, on bi ga također uključio. Već imamo drugo pravilo:

  • Lik "." odgovara bilo kojem liku.

Nije više tako trivijalno kako se činilo, ali s ovim ne možemo puno učiniti. Idemo malo dalje. Pretpostavimo da želimo pronaći retke u kojima se pojavljuju 2002. i 2004. Izgledaju kao dva pretraživanja, ali mogu se odjednom izvršiti ovako:

grep '200[24]' regex

Što znači da želimo pronaći broj 200 iza kojeg slijede 2 ili 4. A rezultat je sljedeći:

ArchLinux: 11-03-2002
Gentoo: 31. /2002
CentO: 14-05-2004 03:32:38
Ubuntu: 20/10/2004

Što nas dovodi do trećeg pravila:

  • Višestruki znakovi zatvoreni u zagrade podudaraju se s bilo kojim od znakova u zagradama.

Zagrade daju više igre. mogu se koristiti i za izuzeće znakova. Na primjer, pretpostavimo da želimo pronaći web mjesta na kojima se pojavljuje znak ":", ali ne slijedi "/". Naredba bi bila sljedeća:

grep ':[^/]' regex

Jednostavno je pitanje stavljanja "^" kao prvog znaka unutar zagrade. Sve željene likove možete staviti ispod. Rezultat ove posljednje naredbe je sljedeći:

ArchLinux: https://wiki.archlinux.org/
Gentoo: https://wiki.gentoo.org/wiki/Main_Page
CentOS: http://wiki.centos.org/
Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/
Arch Linux: 11 Gentoo: 31. CentOs: 14-05-2004 03:32:38 Debian: 16 Ubuntu: 20/10/2004

Sada su označena ":" iza naziva distroa, ali ne i ona u URL-ovima jer URL-ovi iza njih imaju "/".

  • Stavljanje znaka "^" na početak zagrade odgovara bilo kojem znaku, osim ostalim znakovima u zagradi.

Druga stvar koju možemo učiniti je odrediti niz znakova. Na primjer, ako tražite bilo koji broj iza kojeg slijedi "-", to bi izgledalo ovako:

grep '[0-9]-' regex

Ovim određujemo znak između 0 i 9, a zatim znak minus. Pogledajmo rezultat:

ArchLinux: 11-03-2002 CentOs: 14-05-2004 03: 32: 38

U zagradama se može navesti više raspona za miješanje raspona s pojedinačnim znakovima.

  • Postavljanje dva znaka odvojena znakom "-" unutar zagrada podudara se s bilo kojim znakom unutar raspona.

Pogledajmo sada možemo li odabrati prvi dio URL-ova. Ona koja kaže "http" ili "https". Razlikuju se samo u posljednjim "s", pa učinimo to na sljedeći način:

grep -E 'https?' regex

Znak pitanja koristi se za to da znak s lijeve strane postane neobavezan. Ali sada smo naredbi dodali opciju -E. To je zato što je ispitivanje značajka proširenih regularnih izraza. Do sada smo koristili osnovne regularne izraze, pa nismo trebali ništa unositi. Pogledajmo rezultat:

ArchLinux: https: //wiki.archlinux.org/ Gentoo: https: //wiki.gentoo.org/wiki/Main_Page CentOS: http: //wiki.centos.org/ Debian: https: //wiki.debian.org/ Ubuntu: https: //wiki.ubuntu.com/

Dakle, već imamo novo pravilo:

  • Lik iza kojeg slijedi "?" odgovara tom liku ili nijednom. To vrijedi samo za proširene regularne izraze.

Sada ćemo potražiti dvije potpuno različite riječi. Pogledajmo kako pronaći retke koji sadrže i riječ "Debian" i "Ubuntu".

grep -E 'Debian|Ubuntu' regex

Okomitom trakom možemo razdvojiti dva ili više različitih regularnih izraza i tražiti linije koje odgovaraju bilo kojem od njih:

Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/
Debian: 16 / 08 / 1993
Ubuntu: 20 / 10 / 2004
  • Lik «|» služi za odvajanje nekoliko regularnih izraza i podudaranja s bilo kojim od njih. Također je specifičan za proširene regularne izraze.

Nastavimo. Sada ćemo tražiti riječ "Linux", ali samo tamo gdje nije zalijepljena za drugu riječ s lijeve strane. Možemo to učiniti ovako:

grep '\

Ovdje je važan znak "<", ali treba ga izbjeći stavljanjem "\" ispred njega, tako da će ga grep protumačiti kao poseban znak. Rezultat je sljedeći:

Svod Linux: 11-03-2002 Od Linux Rulez.

Također možete upotrijebiti "\>" za traženje riječi koje nisu točno jedna uz drugu. Idemo s primjerom. Pokušajmo s ovom naredbom:

grep 'http\>' regex

Rezultat je sljedeći:

CentOS: http: //wiki.centos.org/

Izašao je "Http", ali ne i "https", jer u "https" još uvijek postoji znak desno od "p" koji može biti dio riječi.

  • Znakovi "<" i ">" odgovaraju početku i kraju riječi. Ti se znakovi moraju izbjeći kako se ne bi tumačili kao doslovni znakovi.

Idemo sa stvarima malo kompliciranijima. Znak "+" odgovara liku s lijeve strane, ponovljen barem jednom. Ovaj je znak dostupan samo s proširenim regularnim izrazima. Pomoću nje možemo pretraživati, na primjer, sekvence nekoliko brojeva u nizu koji počinju s ":".

grep -E ':[0-9]+' regex

rezultat:

CentOs: 14. 05: 32: 38

Broj 38 je također istaknut jer također započinje s ":".

  • Znak "+" odgovara liku s lijeve strane, ponovljen barem jednom.

Također možete kontrolirati broj ponavljanja pomoću "{" i "}". Ideja je staviti u zagrade broj koji pokazuje točan broj ponavljanja koja želimo. Također možete staviti niz. Pogledajmo primjere dva slučaja.

Prvo ćemo pronaći sve četveroznamenkaste sekvence koje postoje:

grep '[0-9]\{4\}' regex

Primijetite da morate pobjeći iz kovrčavih zagrada ako koristite osnovne regularne izraze, ali ne i ako koristite proširene. S proširenim bi bilo ovako:

grep -E '[0-9]{4}' regex

A rezultat u oba slučaja bio bi sljedeći:

ArchLinux: 11-03-2002
Gentoo: 31. /2002
CentO: 14-05-2004 03:32:38
Debian: 16/08/1993
Ubuntu: 20/10 /2004
  • Znakovi "{" i "}" s brojem između njih podudaraju se s prethodnim znakom ponovljenim navedenim brojem puta.

Sada drugi primjer s aparatićem. Pretpostavimo da želimo pronaći riječi koje imaju između 3 i 6 malih slova. Mogli bismo učiniti sljedeće:

grep '[a-z]\{3,6\}' regex

A rezultat bi bio sljedeći:

- ONIista de stranicas wiki: TOrchLinux: https:/ /wiki.Arch Linux.org/ Gzatim: https:/ /wiki.gentoo.org/wiki/Main_Pstarost
CentOS: http:/ /wiki.CentOS.org/ Debian: https:/ /wiki.debian.org/ ILIslijepa ulica: https:/ /wiki.ubuntu.com/ - Fti nedostaješ de lansiranje: TOrch Linux: 11-03-2002 Gzatim: 31. CentOs: 14-05-2004 03:32:38
Debian: 16. Uslijepa ulica: 20. Dto je Linux Rulez.

Što, kao što vidite, ne izgleda previše poput onoga što smo željeli. To je zato što regularni izraz pronalazi slova u drugim riječima koje su duže. Pokušajmo s ovom drugom verzijom:

grep '\<[a-z]\{3,6\}\>' regex

rezultat:

- Popis stranica wiki: ArchLinux: https:/ /wiki.archlinux.org/ Gentoo: https:/ /wiki.gentoo.org/wiki/ Main_Page CentOS: http:/ /wiki.CentOS.org/ Debian: https:/ /wiki.debian.org/ Ubuntu: https:/ /wiki.ubuntu.com/

Ovo već više sliči onome što smo željeli. Ono što smo učinili jest da zahtijeva da riječ započne neposredno prije prvog slova i završi neposredno nakon posljednjeg.

  • Znakovi "{" i "}" s dva broja između njih odvojena zarezom podudaraju se s prethodnim znakom, ponovljenim brojem puta koja su označila dva broja.

Pogledajmo sada lik koji je prvorazredni znak "+". To je "*" i njegovo je djelovanje vrlo slično samo što se podudara s bilo kojim brojem znakova, uključujući nulu. Odnosno, radi isto kao i "+", ali ne zahtijeva da se znak s lijeve strane pojavi u tekstu. Na primjer, pokušajmo potražiti one adrese koje počinju na wikiju, a završavaju na org:

grep 'wiki.*org' regex

Pogledajmo rezultat:

ArchLinux: https: //wiki.archlinux.org/ Gentoo: https: //wiki.gentoo.org/ wiki / Main_Page CentOS: http: //wiki.centos.org/ Debian: https: //wiki.debian.org/

Savršeno.

Sad posljednji lik koji ćemo vidjeti. Znak "\" koristi se za bijeg od znaka s njegove desne strane, tako da on gubi svoje posebno značenje. Na primjer: Pretpostavimo da želimo locirati linije koje završavaju točkom. Prvo što bi nam moglo pasti na pamet moglo bi biti ovo:

grep '.$' regex

Rezultat nije ono što tražimo:

- Popis wiki stranica:
ArchLinux: https://wiki.archlinux.org/
Gentoo: https://wiki.gentoo.org/wiki/Main_Page
CentOS: http://wiki.centos.org/
Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/
- Datumi izdanja: Arch Linux: 11-03-2002
Gentoo: 312
CentOs: 14-05-2004 03:32:38
Debian: 163
Ubuntu: 204
Desde Linux Rulez.

To je zato što "." podudara se s bilo čime, tako da se regularni izraz podudara sa zadnjim znakom svakog retka kakav god bio. Rješenje je sljedeće:

grep '\.$' regex

Sada je rezultat ono što želimo:

Desde Linux Rulez.

Igra je završena

Iako je tema regularnih izraza toliko složena da bih je dao za niz članaka, mislim da sam vam već zadao dovoljno boli. Ako ste uspjeli stići, čestitamo. A ako ste sve ovo pročitali u jednom zasjedanju, uzmite aspirin ili nešto slično, jer to ne može biti dobro.

Za sada je to sve. Ako vam se sviđa ovaj članak, možda možete napisati drugi. U međuvremenu preporučujem da isprobate sve regularne izraze u terminalu kako biste jasno vidjeli kako funkcioniraju. I upamtite: samo Chuck Norris može raščlaniti HTML pomoću regularnih izraza.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Ezekiel dijo

    Kakav bi bio naš život bez regularnog izraza?
    Članak je vrlo koristan, ali pročitat ću ga malo po malo. Hvala puno.

    1.    hexborg dijo

      Hvala vam na komentaru. Još uvijek ne vjerujem da je izašao moj članak. 🙂 Izašlo je s pogreškom, ali nadam se da je korisno. 🙂

  2.   Skalibur dijo

    Hvala vamssssssss! ..

    Prije nekog vremena morao sam malo učiti o regularnim izrazima .. ..Hvala vam na podučavanju .. i detaljnom vodiču kako bih naučio svaki od njih ..

    Vrlo dobro! .. .. Idem po onaj aspirin .. ee

    1.    hexborg dijo

      Molim. Hrabrost i da regularni izrazi ne mogu s vama. 🙂

  3.   Tanraks dijo

    Fantastičan post! Odličan posao. Pitam se koliko vam je sati trebalo 😀

    1.    hexborg dijo

      LOL!! Pitanje je: Koliko bi mi sati trebalo da sam rekao sve što sam namjeravao reći? Beskonačno !! 🙂

  4.   Tammuz dijo

    jedno nisam znao, dobar članak!

    1.    hexborg dijo

      Hvala vam. Zadovoljstvo je podijeliti ga s vama.

  5.   helena_ryuu dijo

    sjajno objašnjenje. čestitam! stvarno korisno!

    1.    hexborg dijo

      Drago mi je što vam je bilo korisno. Stoga je zadovoljstvo pisati.

  6.   anti dijo

    Ovo bi trebalo ići negdje posebno. Poput Istaknutog, ali koji ima vrlo specifičnu korisnost. Prilično korisno, iako bih volio da se to primijeni na Vima.

    1.    hexborg dijo

      To je pitanje postavljanja samog sebe. Imam na umu još nekoliko članaka o regularnim izrazima. I mogao bih razgovarati o vim u njima. Ima neke razlike od onoga što sam objasnio u ovom članku. Stvar je u tome da se nastavi s tim. 🙂

  7.   Fernando dijo

    Dobro!

    Vaš članak je jako dobar, zanimljiv je, nedavno (upravo sada) sam na svojoj web stranici objavio unos koji sam pripremao nekoliko dana u kojem sam prikupio popis metakaraktera za regularne izraze i neke primjere. I bilo je pošteno ući DesdeLinux i pogledajte unos na istu temu!

    Ako je ikakva utjeha, moja je PUNO PUSIJA US

    Svakako su regularni izrazi jedna od najkorisnijih stvari, obično ih koristim za obrezivanje izlaza naredbi i zadržavanje dijela koji me zanima, a zatim, na primjer, u interakciji s njim u bash skripti. Također sam ih puno koristio na sveučilištu, a oni su od vitalne važnosti u izradi sastavljača (u definiciji leksikografskih i raščlanjivača). Ukratko, cijeli svijet.

    Pozdrav i jako jako dobar posao.

    1.    hexborg dijo

      Puno hvala.

      Svidio mi se i vaš članak. Sažetiji je od mog. Može poslužiti kao brza referenca. Slučajnost je da smo ih napisali istodobno. Možete vidjeti da ljude zanima tema. 🙂

  8.   Elery dijo

    Regularni izrazi za lutke =), sada mi je jasnije, usput rečeno, jedan od načina da se dobije izlaz sa bojom za grep je stvaranje zamjenskog imena u .bashrc aliasu grep = 'grep –color = always', u slučaju da nekome odgovara .

    pozdravi

    1.    hexborg dijo

      Pravi. To je još jedan način da se to učini. Hvala na unosu. 🙂

  9.   KZKG ^ Gaara dijo

    O_O ... prilog !!! O_O ...
    Puno vam hvala na postu, neko vrijeme sam čekao tako nešto hahaha, već ga ostavljam otvorenim da ga mirno čitam kod kuće s nula gnjavaže da se koncentriram hahaha.

    Hvala na članku, stvarno znam 😀

    1.    hexborg dijo

      Znala sam da će ti se svidjeti. LOL!! Istina je da mnoge stvari nedostaju, ali već imam na umu drugi dio. 🙂

  10.   Eliecer Tates dijo

    Sjajan članak, da sam ga pročitao jučer, predavanje koje sam danas održao bio bi još lakši za moje učenike!

    1.    hexborg dijo

      LOL!! Šteta što sam zakasnio, ali drago mi je što je korisno. 🙂

  11.   LeoToro dijo

    Napokon !!!, post je super dobar ... Napokon sam pronašao nešto što jasno objašnjava regularne izraze ... ..

    1.    hexborg dijo

      Puno je informacija vani, ali teže je pronaći nešto što je lako razumljivo. Drago mi je što sam popunio tu prazninu. 🙂

      Pozdrav.

  12.   Shakespeare Rhodes dijo

    Hej, trebam pomoć, moram pretražiti / var / logs u formatu: yymmdd, a zapisnici dolaze ovako 130901.log -130901.log, moram pretražiti sve one koji su između 1. rujna i 11. listopada, Jedino što sam uspio učiniti bilo je ukloniti cijeli rujan, ali ne znam kako napraviti cijeli lanac:

    ex: 1309 [0-3] vraća zapisnike između 1. i 30. rujna, ali ne znam kako ih dobiti u istom lancu od 1. do 11. listopada.

    1.    hexborg dijo

      Učiniti to pomoću regularnih izraza pomalo je složeno. Pada mi na pamet da bi ovako nešto moglo uspjeti:

      13(09[0-3]|10(0|1[01]))

      To je prošireni regularni izraz. Ne kažete koji alat koristite, pa vam ne mogu dati više detalja.

      U svakom slučaju mislim da je to slučaj, umjesto da koristim regularne izraze, bolje je to učiniti s findom. Možete probati nešto poput ovoga:

      pronaći. -newermt '01 sep '-a! -newermt '11 okt '-tisak

      Sreća. Nadam se da vam ovo može pomoći.

  13.   čipo dijo

    Pozdrav! Prije svega, htio sam vam zahvaliti na vašem radu jer je ova stranica među mojih "top 3" najboljih Linux stranica.
    Vježbala sam i nisam znala zašto mi RegExp na telefonskom broju nije radio i bilo je da mi nedostaje "-E" (što sam shvatio zahvaljujući ovom postu).
    Htio sam te pitati ne znaš li dobar pdf ili web mjesto na kojem postoje vježbe na RegExp-u, iako s malo mašte možete vježbati da ih sami izmišljate.

    Pozdrav, Pablo.

  14.   pozivljivo dijo

    Vrlo dobro, upravo sam sve pročitao i da, sad mi treba aspirin 🙂

  15.   Oscar dijo

    Najbolje objašnjenje koje sam vidio za regularne izraze. Zahvaljujem se autoru što je podijelio ovo djelo.

    Pozdrav.

  16.   aleksandra dijo

    Jako mi se svidjelo vrlo dobro objašnjenje