S terminalom: Uporaba regularnih izrazov

Ena od stvari, ki mi je bila vedno všeč pri terminalu Linux, je, kaj lahko dosežete z uporabo regularnih izrazov. Ne glede na to, ali moramo najti zapleteno besedilo ali ga nadomestiti s čim drugim, lahko uporaba regularnih izrazov močno poenostavi delo. Začnimo od začetka:

OPOZORILO: Ta objava je bolečina v zadku. Ves čas prebiranja te objave lahko povzroči izgubo zavesti. Preden preberete celotno objavo, si vzemite vmesne odmore ali se posvetujte s svojim zdravnikom ali farmacevtom.

Kaj je regularni izraz?

Regularni izraz je vrsta posebnih znakov, ki nam omogočajo opis besedila, ki ga želimo najti. Če bi na primer iskali besedo "linux", bi bilo dovolj, da to besedo vnesemo v program, ki ga uporabljamo. Sama beseda je pravilen izraz. Zaenkrat se zdi zelo preprosto, a kaj, če želimo najti vse številke v določeni datoteki? Ali vse vrstice, ki se začnejo z veliko začetnico? V teh primerih ne morete več dati preproste besede. Rešitev je uporaba regularnega izraza.

Regularni izrazi v primerjavi z vzorci datotek.

Preden se lotimo teme regularnih izrazov, želim razjasniti pogost nesporazum glede regularnih izrazov. Regularni izraz ni tisto, kar damo kot parameter v ukaze, kot so rm, cp itd. Za sklicevanje na različne datoteke na trdem disku. To bi bil vzorec datoteke. Regularni izrazi, čeprav podobni, ker uporabljajo nekatere skupne znake, so različni. Vzorec datoteke se sproži proti datotekam na trdem disku in vrne tiste, ki se popolnoma ujemajo z vzorcem, medtem ko se regularni izraz sproži proti besedilu in vrne vrstice, ki vsebujejo iskano besedilo. Na primer regularni izraz, ki ustreza vzorcu *.* bilo bi nekaj takega ^.*\..*$

Vrste regularnih izrazov.

Vsi programi ne uporabljajo enakih regularnih izrazov. Ne veliko manj. Obstaja več vrst bolj ali manj standardnih regularnih izrazov, vendar obstajajo programi, ki nekoliko spremenijo sintakso, vključujejo lastne razširitve ali celo uporabljajo popolnoma drugačne znake. Ko želite torej uporabiti regularne izraze s programom, ki ga ne poznate dobro, najprej preglejte priročnik ali dokumentacijo programa, da vidite, kakšni so regularni izrazi, ki jih prepozna.

Prvič, obstajata dve glavni vrsti regularnih izrazov, ki jih vsebuje standard POSIX, kar uporabljajo orodja Linux. So osnovni in razširjeni regularni izrazi. Številni ukazi, ki delujejo z regularnimi izrazi, na primer grep ali sed, omogočajo uporabo teh dveh vrst. O njih bom govoril spodaj. Obstajajo tudi regularni izrazi v slogu PERL, nato pa obstajajo programi, kot so vim ali emacs, ki uporabljajo njihove različice. Odvisno od tega, kaj želimo narediti, je morda bolj primerno uporabiti eno ali drugo.

Testiranje regularnih izrazov.

Sintaksa regularnih izrazov ni nič malenkostna. Ko moramo napisati zapleten regularni izraz, bomo pred nizom posebnih znakov, ki jih je na prvi pogled nemogoče razumeti, zato je za njihovo uporabo bistvenega pomena, da opravimo vse teste, ki jih želimo in vidimo. rezultate enostavno. Zato bom zdaj dal nekaj ukazov, s katerimi lahko izvajamo teste in preizkušamo vse, kar potrebujemo, dokler ne prevladujejo regularni izrazi.

Prvi je ukaz grep. To je ukaz, ki ga bomo najpogosteje uporabljali za iskanje. Sintaksa je naslednja:

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

Priporočam, da regularne izraze vedno vstavite v enojne narekovaje, da lupina ne bo uspela. Prvi način je najti regularni izraz v datoteki. Drugi omogoča filtriranje izhoda ukaza skozi regularni izraz. Privzeto grep uporablja osnovne regularne izraze. Možnost -E je za uporabo razširjenih regularnih izrazov.

Trik, s katerim lahko ugotovimo, kako delujejo regularni izrazi, je omogočiti uporabo barve v ukazu grep. Tako bo poudarjen del besedila, ki se ujema z regularnim izrazom, ki ga uporabljamo. Če želite v ukazu grep aktivirati barvo, se prepričajte, da je spremenljivka okolja GREP_OPTIONS vsebujejo vrednost --color, kar lahko storite s tem ukazom:

GREP_OPTIONS=--color

Lahko ga damo v .bashrc, da ga imamo vedno aktiviranega.

Drugi način uporabe regularnih izrazov je uporaba ukaza sed. Ta je bolj primeren za zamenjavo besedila, lahko pa se uporablja tudi za iskanje. Sintaksa zanj bi bila takšna:

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

Ukaz sed privzeto uporablja tudi osnovne regularne izraze, razširjene regularne izraze lahko uporabite z možnostjo -r.

Še en ukaz, ki ga tudi želim poimenovati, je awk. Ta ukaz lahko uporabite za marsikaj, saj vam omogoča pisanje skriptov v vašem programskem jeziku. Če želimo najti regularni izraz v datoteki ali na izhodu ukaza, bi bil način njegove uporabe naslednji:

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

Ta ukaz vedno uporablja razširjene regularne izraze.

Za izvajanje testov bomo potrebovali tudi besedilo, ki bo služilo kot primer za iskanje v njem. Uporabimo lahko naslednje besedilo:

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

To je besedilo, ki ga bom uporabil za primere v preostalem delu prispevka, zato priporočam, da ga kopirate v datoteko, da bo priročno iz terminala. Lahko vnesete želeno ime. Rekel sem mu regularni izraz.

Začetna lekcija.

Zdaj imamo vse, kar potrebujemo za začetek testiranja regularnih izrazov. Gremo malo po malo. Navedel bom nekaj primerov iskanj z regularnimi izrazi, v katerih bom razložil, čemu služi vsak znak. Niso zelo dobri primeri, a ker bom imel zelo dolgo objavo, je ne želim več zapletati. In samo opraskal bom površino tega, kar je mogoče storiti z regularnimi izrazi.

Najenostavneje je iskati določeno besedo, na primer, recimo, da želimo poiskati vse vrstice, ki vsebujejo besedo "Linux". To je najlažje, saj moramo samo napisati:

grep 'Linux' regex

In lahko vidimo rezultat:

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

To so tri vrstice, ki vsebujejo besedo "Linux", ki bo, če smo uporabili barvni trik, označena. Upoštevajte, da prepozna besedo, ki jo iščemo, tudi če je del daljše besede, kot v "ArchLinux". Vendar ne poudarja besede "linux", ki se pojavlja v URL-ju "https://wiki.archlinux.org/". To je zato, ker se tam prikaže z malimi črkami "l" in smo ga iskali z velikimi črkami. Ukaz grep ima možnosti za to, vendar o njih ne bom govoril v članku, ki govori o regularnih izrazih.

S tem preprostim testom lahko naredimo prvi zaključek:

  • Običajni znak, vstavljen v regularni izraz, se sam ujema.

Se pravi, da če postavite črko "a", bo iskala črko "a". Zdi se logično, kajne? 🙂

Zdaj predpostavimo, da želimo poiskati besedo "CentO", ki ji sledi kateri koli znak, vendar le en znak. Za to lahko uporabimo znak ".", Ki je nadomestni znak, ki se ujema s katerim koli znakom, vendar le z enim:

grep 'CentO.' regex

In rezultat je:

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

Kar pomeni, da vključuje "S" v "CentOS", čeprav je v enem primeru velik, drugi pa mali. Če bi se na tem mestu pojavil kak drug lik, bi ga tudi vključil. Že imamo drugo pravilo:

  • Znak "." se ujema s katerim koli znakom.

Ni več tako nepomembno, kot se je zdelo, vendar s tem ne moremo storiti veliko. Gremo še malo naprej. Predpostavimo, da želimo najti vrstice, v katerih se pojavita leti 2002 in 2004. Zdi se, da gre za dva iskanja, vendar jih je mogoče opraviti naenkrat tako:

grep '200[24]' regex

Kar pomeni, da želimo najti število 200, ki mu sledi 2 ali 4. Rezultat pa je naslednji:

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

Kar nas pripelje do tretjega pravila:

  • Več znakov, zajetih v oklepajih, se ujema s katerim koli znakom v oklepajih.

Nosilci dajo več igre. z njimi lahko izključimo tudi znake. Denimo, da želimo poiskati spletna mesta, kjer se pojavi znak ":", vendar mu ne sledi "/". Ukaz bi bil tak:

grep ':[^/]' regex

Preprosto gre za postavitev znaka "^" kot prvega znaka v oklepaju. Spodaj lahko postavite vse želene znake. Rezultat tega zadnjega ukaza je naslednji:

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

Zdaj so za imeni distro označena ":", ne pa tudi tistih v URL-jih, ker imajo URL-ji za njimi "/".

  • Postavitev znaka "^" na začetek oklepaja se ujema s katerim koli znakom, razen z drugimi znaki v oklepaju.

Druga stvar, ki jo lahko naredimo, je, da določimo vrsto znakov. Na primer, če želite poiskati katero koli številko, ki ji sledi "-", bi to izgledalo takole:

grep '[0-9]-' regex

S tem določimo znak med 0 in 9 in nato minus. Poglejmo rezultat:

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

V oklepajih lahko določite več obsegov, da celo mešate obsege z enimi znaki.

  • Umestitev dveh znakov, ločenih z "-" v oklepajih, se ujema s katerim koli znakom v območju.

Poglejmo zdaj, ali lahko izberemo prvi del URL-jev. Tisti, ki piše "http" ali "https". Razlikujejo se le v končnih "s", zato naredimo tako:

grep -E 'https?' regex

Z vprašajem se znak na levi postavi neobvezen. Zdaj pa smo ukazu dodali možnost -E. To je zato, ker je zaslišanje značilnost razširjenih regularnih izrazov. Do zdaj smo uporabljali osnovne regularne izraze, zato nam ni bilo treba ničesar vnašati. Poglejmo 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/

Torej že imamo novo pravilo:

  • Znak, ki mu sledi "?" se ujema s tem znakom ali z nobenim. To velja samo za razširjene regularne izraze.

Zdaj bomo iskali dve popolnoma različni besedi. Poglejmo, kako najdemo vrstice, ki vsebujejo besedo "Debian" in "Ubuntu".

grep -E 'Debian|Ubuntu' regex

Z navpično črto lahko ločimo dva ali več različnih regularnih izrazov in poiščemo črte, ki se ujemajo s katerim koli od njih:

Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/
Debian: 16 / 08 / 1993
Ubuntu: 20 / 10 / 2004
  • Znak «|» služi za ločevanje več regularnih izrazov in ujemanj s katerim koli od njih. Prav tako je značilno za razširjene regularne izraze.

Nadaljujmo. Zdaj bomo našli besedo "Linux", vendar le tam, kjer se ne drži druge besede na levi. To lahko storimo tako:

grep '\

Tu je pomemben znak "<", vendar se mu je treba izogniti tako, da pred njega postavite "\", tako da ga grep razlaga kot poseben znak. Rezultat je naslednji:

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

"\>" Lahko uporabite tudi za iskanje besed, ki niso tik ob drugi. Pojdimo s primerom. Preizkusimo ta ukaz:

grep 'http\>' regex

Rezultat, ki ga ustvari, je naslednji:

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

Izšel je "Http", ne pa tudi "https", ker je v "https" še vedno znak desno od "p", ki je lahko del besede.

  • Znaka "<" in ">" se ujemata z začetkom in koncem besede. Te znake je treba ubežati, da jih ne razumemo kot dobesedne znake.

Gremo s stvarmi, ki so nekoliko bolj zapletene. Znak "+" se ujema z znakom na levi, ponovljen vsaj enkrat. Ta znak je na voljo samo z razširjenimi regularnimi izrazi. Z njim lahko iščemo na primer zaporedja več števil v vrsti, ki se začnejo z ":".

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

Rezultat:

CentOs: 14. 05. 2004 03: 32: 38

Označena je tudi številka 38, ker se prav tako začne z ":".

  • Znak "+" se ujema z znakom na levi, ponovljen vsaj enkrat.

Število ponovitev lahko nadzirate tudi s tipkama "{" in "}". Ideja je, da v oklepaje vstavimo številko, ki označuje natančno število ponovitev, ki jih želimo. Lahko postavite tudi obseg. Oglejmo si primera obeh primerov.

Najprej bomo našli vsa štirimestna zaporedja:

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

Upoštevajte, da je treba zavite oklepaje ubežati, če uporabljamo osnovne regularne izraze, ne pa tudi, če uporabljamo razširjene. Z razširjenim bi bilo tako:

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

Rezultat v obeh primerih bi bil naslednji:

ArchLinux: 11-03-2002
Gentoo: 31. 03. /2002
CentO: 14-05-2004 03:32:38
Debian: 16/08/1993
Ubuntu: 20/10 /2004
  • Znaka "{" in "}" s številko med njima se ujemata s prejšnjim znakom, ki se je ponovil določeno število krat.

Zdaj drugi primer z naramnicami. Recimo, da želimo najti besede, ki imajo med 3 in 6 malimi črkami. Lahko naredimo naslednje:

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

Rezultat bi bil naslednji:

- List de Strans wiki: TOrchLinux: https:/ /wiki.archlinux.org/ Gpotem: https:/ /wiki.gentoo.org/wiki/Main_Pstarost
CentOS: http:/ /wiki.CentOS.org/ Debian: https:/ /wiki.debian.org/ ALIslepa ulica: https:/ /wiki.ubuntu.com/ - Fpogrešate de Release: TOrch Linux: 11-03-2002 Gpotem: 31 CentOs: 14-05-2004 03:32:38
Debian: 16 Uslepa ulica: 20 D.je Linux Rulez.

Kar pa, kot vidite, ni preveč podobno tistemu, kar smo želeli. To je zato, ker regularni izraz najde črke v drugih besedah, ki so daljše. Preizkusimo še to različico:

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

Rezultat:

- Seznam strani 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/

To je že bolj kot tisto, kar smo želeli. Kar smo storili, je, da se beseda začne tik pred prvo črko in konča tik za zadnjo.

  • Znaka "{" in "}" z dvema številkama, ločenima z vejico, se ujemata s prejšnjim znakom, tolikokrat, kolikor sta obe številki označili.

Poglejmo si zdaj lik, ki je primerek "+". Je "*" in je zelo podoben, saj se ujema s poljubnim številom znakov, vključno z ničlo. To pomeni, da počne enako kot "+", vendar ne zahteva, da se znak na levi prikaže v besedilu. Poskusimo na primer poiskati naslove, ki se začnejo na wikiju in končajo na org:

grep 'wiki.*org' regex

Poglejmo rezultat:

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

Perfecto.

Zdaj zadnji lik, ki ga bomo videli. Znak "\" se uporablja za pobeg pred znakom na desni, tako da izgubi poseben pomen. Na primer: Recimo, da želimo najti črte, ki se končajo s točko. Prva stvar, ki bi se nam lahko zgodila, bi lahko bila ta:

grep '.$' regex

Rezultat ni tisto, kar iščemo:

- Seznam strani 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/
- Datumi izdaje: Arch Linux: 11-03-2002
Gentoo: 312
CentOs: 14-05-2004 03:32:38
Debian: 163
Ubuntu: 204
Desde Linux Rulez.

To je zato, ker "." ujema se s čimer koli, tako da se regularni izraz ujema z zadnjim znakom vsake vrstice, kakršen koli že je. Rešitev je naslednja:

grep '\.$' regex

Zdaj je rezultat tisto, kar želimo:

Desde Linux Rulez.

Igra se je končala

Čeprav je tema regularnih izrazov tako zapletena, da bi jo dal za vrsto člankov, mislim, da sem vam že dal dovolj bolečine. Če ste uspeli prispeti, čestitam. In če ste vse to prebrali v enem sestanku, vzemite aspirin ali kaj podobnega, saj to ne more biti dobro.

Za zdaj je to vse. Če vam je ta članek všeč, lahko napišete drugega. Medtem vam priporočam, da preizkusite vse regularne izraze v terminalu, da jasno vidite, kako delujejo. In ne pozabite: samo Chuck Norris lahko razčleni HTML z uporabo regularnih izrazov.


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   Ezequiel je dejal

    Kakšno bi bilo naše življenje brez regularnega izraza?
    Članek je zelo uporaben, vendar ga bom prebral po malem. Najlepša hvala.

    1.    Hexborg je dejal

      Hvala za komentar. Še vedno ne verjamem, da je izšel moj članek. 🙂 Izšlo je z nekaj napake, vendar upam, da je koristno. 🙂

  2.   Scalibur je dejal

    Hvalassssssss! ..

    Pred časom sem se moral malo učiti o regularnih izrazih .. ..Hvala vam za poučevanje .. in vodnik po korakih, da se naučim vsakega posebej.

    Zelo dobro! .. .. Dobil bom tisti aspirin .. ee

    1.    Hexborg je dejal

      Ni za kaj. Pogum in da regularni izrazi ne morejo z vami. 🙂

  3.   tanrax je dejal

    Fantastična objava! Odlično opravljeno. Zanima me, koliko ur vam je vzelo 😀

    1.    Hexborg je dejal

      LOL !! Vprašanje je: Koliko ur bi mi vzelo, če bi rekel vse, kar sem hotel povedati? Neskončno !! 🙂

  4.   Tammuz je dejal

    ene stvari nisem vedel, dober članek!

    1.    Hexborg je dejal

      Hvala vam. Z veseljem ga delim z vami.

  5.   helena_ryuu je dejal

    odlična razlaga. čestitke! resnično koristno!

    1.    Hexborg je dejal

      Vesel sem, da se vam je zdel koristen. Zato je z veseljem pisati.

  6.   proti je dejal

    To bi moralo iti nekam posebej. Všeč mi je Featured, vendar ima zelo specifično uporabnost. Precej koristno, čeprav bi rad videl, da se uporablja za Vima.

    1.    Hexborg je dejal

      To je vprašanje, kako se vprašati. V mislih imam še nekaj člankov o regularnih izrazih. In o njih bi lahko govoril o vim. Ima nekaj razlik od tega, kar sem razložil v tem članku. Treba je nadaljevati. 🙂

  7.   Fernando je dejal

    Dobro!

    Vaš članek je zelo dober, radoveden je, pred kratkim (prav zdaj) sem na svoji spletni strani objavil vnos, ki sem ga pripravljal nekaj dni, kjer sem zbral seznam metaznakov za regularne izraze in nekaj primerov. In bilo je pošteno vstopiti DesdeLinux in si oglejte vnos na isto temo!

    Če mi je v tolažbo, je MNOGO VEČ MOŽEN 😀

    Zagotovo so regularni izrazi ena najbolj uporabnih stvari, ki jih običajno uporabljam za obrezovanje izhoda ukazov in ohranitev dela, ki me zanima, nato pa na primer z njim sodelujem v bash skriptu. Veliko jih uporabljam tudi na univerzi in so ključnega pomena pri izdelavi prevajalnikov (v definiciji leksikografskih in razčlenjevalnikov). Skratka cel svet.

    Lep pozdrav in zelo zelo dobro delo.

    1.    Hexborg je dejal

      Hvala lepa.

      Všeč mi je bil tudi vaš članek. Je bolj jedrnat kot moj. Lahko služi kot hitra referenca. Naključje je, da smo jih pisali hkrati. Vidite, da ljudi zadeva zanima. 🙂

  8.   Elery je dejal

    Regularni izrazi za lutke =), zdaj mi je bolj jasno, mimogrede, en način, da dobimo izhod z barvo za grep, je ustvarjanje vzdevka v .bashrc alias grep = 'grep –color = always', če nekomu uspe .

    pozdrav

    1.    Hexborg je dejal

      Prav. To je še en način za to. Hvala za prispevek. 🙂

  9.   KZKG ^ Gaara je dejal

    O_O… prispevek !!! O_O ...
    Najlepša hvala za prispevek, nekaj časa sem čakal na kaj takega, lol, pustim ga odprtega, da ga mirno preberem doma z nič težavami, da se koncentriram lol.

    Hvala za članek, resnično 😀

    1.    Hexborg je dejal

      Vedela sem, da ti bo všeč. LOL !! Resnica je, da marsikaj manjka, ampak v mislih imam že drugi del. 🙂

  10.   Eliecer Tates je dejal

    Super članek, če bi ga le prebral včeraj, bi bil pouk, ki sem ga danes imel, še lažji za moje učence!

    1.    Hexborg je dejal

      LOL !! Škoda, da sem zamujal, vendar vesel, da mi pomaga. 🙂

  11.   LeoToro je dejal

    Končno !!!, super dober prispevek ... Končno sem našel nekaj, kar jasno razlaga regularne izraze ...

    1.    Hexborg je dejal

      Obstaja veliko informacij, vendar je težje najti nekaj, kar je lahko razumljivo. Vesel sem, da sem zapolnil to vrzel. 🙂

      Lep pozdrav.

  12.   Shakespeare Rhodes je dejal

    Hej, rabim pomoč, iskati moram v / var / logs v obliki: yymmdd, dnevniki pa so takšni 130901.log -130901.log, iskati moram vse, ki so med 1. septembrom in 11. oktobrom, Edino, kar mi je uspelo, je bilo odstraniti ves september, vendar ne vem, kako narediti celotno verigo:

    ex: 1309 [0-3] mi vrne dnevnike med 1. in 30. septembrom, vendar ne vem, kako priti v isto verigo od 1. do 11. oktobra.

    1.    Hexborg je dejal

      To narediti z uporabo regularnih izrazov je nekoliko zapleteno. Zdi se mi, da bi kaj takega lahko delovalo:

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

      Je razširjeni regularni izraz. Ne povejte, katero orodje uporabljate, zato vam ne morem dati več podrobnosti.

      Vseeno mislim, da je temu tako, namesto da bi uporabljali regularne izraze, je bolje, da to storite z iskanjem. Lahko poskusite nekaj takega:

      najti. -newermt '01 sep '-a! -newermt '11 okt '-tiskanje

      Sreča. Upam, da vam lahko to pomaga.

  13.   čipo je dejal

    Pozdravljeni! Najprej bi se vam rad zahvalil za vaše delo, saj je ta stran v mojem "top 3" najboljših spletnih mest za Linux.
    Vadil sem in nisem vedel, zakaj RegExp na telefonski številki zame ni deloval in sem pogrešal "-E" (kar sem spoznal zahvaljujoč tej objavi).
    Želel sem vas vprašati, če ne poznate dobrega pdf-ja ali spletnega mesta, kjer so vaje na RegExp-u, čeprav lahko z malo domišljije vadite, da si jih sami izmislite.

    Lep pozdrav, Pablo.

  14.   klicno je dejal

    Zelo dobro, pravkar sem vse prebral in ja zdaj rabim aspirin 🙂

  15.   Óscar je dejal

    Najboljša razlaga, ki sem jo videl glede regularnih izrazov. Zahvaljujem se avtorju, ker si je delil to delo.

    Pozdrav.

  16.   aleksander je dejal

    Zelo všeč mi je bila zelo dobra razlaga