Jedna z vecí, ktorá sa mi na termináli Linux vždy páčila, je to, čo môžete dosiahnuť použitím regulárnych výrazov. Či už potrebujeme nájsť komplikovaný text alebo ho nahradiť iným, použitie regulárnych výrazov môže prácu veľmi zjednodušiť. Začnime od začiatku:
Čo je to regulárny výraz?
Regulárny výraz je rad špeciálnych znakov, ktoré nám umožňujú opísať text, ktorý chceme nájsť. Napríklad, ak by sme chceli vyhľadať slovo „linux“, stačilo by ho vložiť do programu, ktorý používame. Samotné slovo je regulárny výraz. Zatiaľ sa to zdá veľmi jednoduché, ale čo keď chceme nájsť všetky čísla v určitom súbore? Alebo všetky riadky, ktoré sa začínajú veľkým písmenom? V týchto prípadoch už nemôžete napísať jednoduché slovo. Riešením je použitie regulárneho výrazu.
Regulárne výrazy vs. vzory súborov.
Predtým, ako sa dostaneme k predmetu regulárnych výrazov, chcem objasniť bežné nedorozumenie týkajúce sa regulárnych výrazov. Regulárny výraz nie je to, čo dávame ako parameter do príkazov ako rm, cp atď., Ktoré odkazujú na rôzne súbory na pevnom disku. To by bol vzor súboru. Regulárne výrazy, aj keď sú podobné tým, že používajú niektoré bežné znaky, sú odlišné. Vzor súboru sa spustí proti súborom na pevnom disku a vráti tie, ktoré sa úplne zhodujú so vzorom, zatiaľ čo regulárny výraz sa spustí proti textu a vráti riadky, ktoré obsahujú hľadaný text. Napríklad regulárny výraz zodpovedajúci vzoru *.*
bolo by to niečo ako ^.*\..*$
Typy regulárnych výrazov.
Nie všetky programy používajú rovnaké regulárne výrazy. Nie oveľa menej. Existuje niekoľko viac alebo menej štandardných typov regulárnych výrazov, existujú však programy, ktoré mierne menia syntax, obsahujú vlastné prípony alebo dokonca používajú úplne odlišné znaky. Preto, ak chcete používať regulárne výrazy s programom, ktorý dobre neovládate, najskôr je potrebné pozrieť sa do príručky alebo dokumentácie k programu a zistiť, aké sú regulárne výrazy, ktoré rozpoznáva.
Najprv existujú dva hlavné typy regulárnych výrazov, ktoré obsahuje štandard POSIX, čo používajú nástroje Linux. Sú to základné a rozšírené regulárne výrazy. Mnoho príkazov, ktoré pracujú s regulárnymi výrazmi, ako napríklad grep alebo sed, vám umožňuje používať obidva typy. Budem o nich hovoriť nižšie. Existujú aj regulárne výrazy v štýle PERL a potom existujú programy ako vim alebo emacs, ktoré používajú ich varianty. V závislosti na tom, čo chceme robiť, môže byť vhodnejšie použiť jedno alebo druhé.
Testovanie regulárnych výrazov.
Syntax regulárnych výrazov nie je vôbec triviálna. Keď budeme musieť napísať zložitý regulárny výraz, budeme pred reťazou špeciálnych znakov, ktorým na prvý pohľad nebude možné porozumieť, takže aby sme sa naučili, ako ich používať, je nevyhnutné mať spôsob, ako urobiť všetky testy, ktoré chceme a uvidíme výsledky ľahko. Preto teraz uvediem niekoľko príkazov, pomocou ktorých môžeme robiť testy a experimentovať so všetkým, čo potrebujeme, kým nebudú dominovať regulárne výrazy.
Prvý z nich je príkaz grep. Toto je príkaz, ktorý budeme najčastejšie používať na vyhľadávanie. Syntax je nasledovná:
grep [-E] 'REGEX' FICHERO
COMANDO | grep [-E] 'REGEX'
Odporúčam vždy dávať regulárne výrazy do jednoduchých úvodzoviek, aby sa shell do toho nedostal. Prvým spôsobom je nájsť regulárny výraz v súbore. Druhá umožňuje filtrovanie výstupu príkazu prostredníctvom regulárneho výrazu. Grep štandardne používa základné regulárne výrazy. Možnosť -E slúži na použitie rozšírených regulárnych výrazov.
Trik, ktorý nám môže pomôcť zistiť, ako fungujú regulárne výrazy, je povoliť použitie farby v príkaze grep. Takto bude zvýraznená časť textu, ktorá sa zhoduje s regulárnym výrazom, ktorý používame. Ak chcete aktivovať farbu v príkaze grep, ubezpečte sa, že je použitá premenná prostredia GREP_OPTIONS
obsahovať v hodnote --color
, ktoré je možné vykonať pomocou tohto príkazu:
GREP_OPTIONS=--color
Môžeme ho vložiť do súboru .bashrc, aby sme ho mali vždy aktivovaný.
Ďalším spôsobom, ako používať regulárne výrazy, je použitie príkazu sed. Je to vhodnejšie na nahradenie textu, ale dá sa to použiť aj na vyhľadávanie. Jeho syntax by bola nasledovná:
sed -n[r] '/REGEX/p' FICHERO
COMANDO | sed -n[r] '/REGEX/p'
Príkaz sed štandardne používa aj základné regulárne výrazy, rozšírené regulárne výrazy môžete použiť s voľbou -r.
Ďalším príkazom, ktorý chcem tiež pomenovať, je awk. Tento príkaz je možné použiť na veľa vecí, pretože vám umožňuje písať skripty vo vašom vlastnom programovacom jazyku. Ak chceme nájsť regulárny výraz v súbore alebo na výstupe príkazu, spôsob jeho použitia by bol tento:
awk '/REGEX/' FICHERO
COMANDO | awk '/REGEX/'
Tento príkaz vždy používa rozšírené regulárne výrazy.
Na vykonanie našich testov budeme tiež potrebovať text, ktorý bude slúžiť ako príklad na jeho prehľadanie. Môžeme použiť nasledujúci text:
- 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.
Toto je text, ktorý použijem pre príklady zvyšku príspevku, preto vám odporúčam ho skopírovať do súboru, aby ste ho mali po ruke z terminálu. Môžete dať požadované meno. Nazval som to regulárny výraz.
Počiatočná lekcia.
Teraz máme všetko, čo potrebujeme na začatie testovania regulárnych výrazov. Poďme kúsok po kúsku. Uvediem niekoľko príkladov hľadania s regulárnymi výrazmi, v ktorých vysvetlím, na čo slúžia jednotlivé znaky. Nie sú to veľmi dobré príklady, ale keďže budem mať veľmi dlhý post, už to nechcem komplikovať. A ja len poškriabem povrch toho, čo sa dá robiť pomocou regulárnych výrazov.
Najjednoduchšie zo všetkých je vyhľadať konkrétne slovo. Predpokladajme napríklad, že chceme vyhľadať všetky riadky, ktoré obsahujú slovo „Linux“. Toto je najjednoduchšie, pretože musíme iba napísať:
grep 'Linux' regex
A môžeme vidieť výsledok:
OblúkLinux: https://wiki.archlinux.org/ Arch Linux: 11-03-2002 od Linux Rulez.
Toto sú tri riadky, ktoré obsahujú slovo „Linux“, ktoré, ak sme použili farebný trik, sa objaví zvýraznené. Všimnite si, že rozpoznáva slovo, ktoré hľadáme, aj keď je súčasťou dlhšieho slova ako v „ArchLinux“. Nezvýrazňuje však slovo „linux“, ktoré sa nachádza v adrese URL „https://wiki.archlinux.org/“. Je to preto, lebo sa tam zobrazuje s malým písmenom „l“ a hľadali sme ho veľkými písmenami. Príkaz grep má na to možnosti, ale nebudem o nich hovoriť v článku o regulárnych výrazoch.
Pomocou tohto jednoduchého testu môžeme vyvodiť prvý záver:
- Normálny znak vložený do regulárneho výrazu sa zhoduje.
Čo znamená, že ak vložíte písmeno „a“, bude hľadať písmeno „a“. Zdá sa to logické, že? 🙂
Teraz predpokladajme, že chceme hľadať slovo „CentO“, za ktorým nasleduje akýkoľvek znak, ale iba jeden znak. Na tento účel môžeme použiť znak „.“, Čo je zástupný znak, ktorý sa zhoduje s ľubovoľným znakom, ale iba s jedným:
grep 'CentO.' regex
A výsledok je:
CentOS: http://wiki.centos.org/ centov: 14-05-2004 03:32:38
Čo znamená, že obsahuje „S“ v „CentOS“, aj keď v jednom prípade je veľké a v druhom malé. Keby sa na tom mieste objavila akákoľvek iná postava, zahŕňala by to aj to. Máme už druhé pravidlo:
- Znak „.“ sa zhoduje s ľubovoľným znakom.
Už to nie je také malicherné, ako sa zdalo, ale s tým nemôžeme urobiť veľa. Poďme trochu ďalej. Predpokladajme, že chceme nájsť riadky, v ktorých sa objavujú roky 2002 a 2004. Vyzerajú ako dve vyhľadávania, ale dajú sa vykonať naraz takto:
grep '200[24]' regex
Čo znamená, že chceme nájsť číslo 200, za ktorým nasleduje 2 alebo 4. Výsledok je tento:
ArchLinux: 11-03-2002 Gentoo: 31. /2002 CentOS: 14-05-2004 03:32:38 Ubuntu: 20/10/2004
Čím sa dostávame k tretiemu pravidlu:
- Viaceré znaky uvedené v zátvorkách sa zhodujú s ľubovoľnými znakmi v zátvorkách.
Konzoly poskytujú viac hry. môžu byť tiež použité na vylúčenie znakov. Predpokladajme napríklad, že chceme vyhľadávať weby, kde sa zobrazuje znak „:“, ale za ním nie je znak „/“. Príkaz by vyzeral takto:
grep ':[^/]' regex
Jednoducho ide o to, aby ste do zátvorky vložili ako prvý znak znak „^“. Nižšie môžete umiestniť všetky požadované znaky. Výsledkom tohto posledného príkazu je:
Arch Linux: 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. 03. 2002 Gentoo: 31 CentOs: 14 05 - 2004 03:32:38 Debian: 16. 08. 1993 Ubuntu: 20/10/2004
Teraz je za názvami distribúcií zvýraznený znak „:“, nie však tie v adresách URL, pretože adresy URL majú za sebou „/“.
- Ak vložíte znak „^“ na začiatok zátvorky, bude sa zhodovať s ľubovoľným znakom okrem ostatných znakov v zátvorke.
Ďalšou vecou, ktorú môžeme urobiť, je určiť rozsah znakov. Napríklad na vyhľadanie ľubovoľného čísla nasledovaného znakom „-“ by to vyzeralo takto:
grep '[0-9]-' regex
Týmto určujeme znak medzi 0 a 9 a potom znamienko mínus. Pozrime sa na výsledok:
ArchLinux: 11-03-2002 CentOs: 14-05-2004 03: 32: 38
V zátvorkách je možné určiť viac rozsahov, aby sa rozsahy aj so samostatnými znakmi mohli kombinovať.
- Umiestnenie dvoch znakov oddelených v zátvorkách znakom „-“ sa zhoduje s ľubovoľným znakom v rozsahu.
Pozrime sa teraz, či môžeme vybrať prvú časť adries URL. Ten, ktorý hovorí „http“ alebo „https“. Líšia sa iba v konečnom „s“, urobme to teda nasledovne:
grep -E 'https?' regex
Otazník slúži na to, aby bol znak zľava voliteľný. Teraz sme však do príkazu pridali možnosť -E. Je to tak preto, lebo výsluch je znakom rozšírených regulárnych výrazov. Doteraz sme používali základné regulárne výrazy, takže nebolo treba nič dávať. Pozrime sa na výsledok:
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/
Takže už máme nové pravidlo:
- Znak, za ktorým nasleduje „?“ sa zhoduje s daným znakom alebo žiadnym. Toto platí iba pre rozšírené regulárne výrazy.
Teraz nájdeme dve úplne odlišné slová. Pozrime sa, ako nájsť riadky, ktoré obsahujú slovo „Debian“ aj „Ubuntu“.
grep -E 'Debian|Ubuntu' regex
Pomocou zvislej čiary môžeme oddeliť dva alebo viac rôznych regulárnych výrazov a vyhľadať riadky, ktoré sa zhodujú s ktorýmkoľvek z nich:
debian: https://wiki.debian.org/ ubuntu: https://wiki.ubuntu.com/ debian: 16 / 08 / 1993 ubuntu: 20 / 10 / 2004
- Znak «|» slúži na oddelenie viacerých regulárnych výrazov a zhoduje sa s ktorýmkoľvek z nich. Je špecifický aj pre rozšírené regulárne výrazy.
Pokračujme. Teraz budeme hľadať slovo „Linux“, ale iba tam, kde nie je prilepené k ďalšiemu slovu vľavo. Môžeme to urobiť takto:
grep '\
Dôležitý znak je tu „<“, je však potrebné ho uniknúť vložením znaku „\“ pred neho, aby ho grep interpretoval ako špeciálny znak. Výsledok je nasledovný:
Oblúk Linux: 11-03-2002 od Linux Rulez.
Môžete tiež použiť „\>“ na hľadanie slov, ktoré nie sú vedľa seba. Poďme na príklad. Vyskúšajme tento príkaz:
grep 'http\>' regex
Výstup, ktorý produkuje, je tento:
CentOS: http: //wiki.centos.org/
„Http“ vyšiel, ale nie „https“, pretože v „https“ je stále napravo od „p“ znak, ktorý môže byť súčasťou slova.
- Znaky „<“ a „>“ sa zhodujú so začiatkom a koncom slova. Týmto znakom je potrebné uniknúť, aby sa interpretovali ako doslovné znaky.
Ideme s vecami trochu komplikovanejšie. Znak „+“ sa zhoduje so znakom po jeho ľavej strane, ktorý sa opakuje najmenej raz. Tento znak je k dispozícii iba s rozšírenými regulárnymi výrazmi. Pomocou neho môžeme vyhľadávať napríklad sekvencie niekoľkých čísel v rade, ktoré sa začínajú zámenom „:“.
grep -E ':[0-9]+' regex
výsledok:
CentOs: 14-05-2004 03: 32: 38
Číslo 38 je tiež zvýraznené, pretože sa tiež začína znakom „:“.
- Znak „+“ sa zhoduje so znakom naľavo, opakuje sa najmenej raz.
Počet opakovaní môžete tiež ovládať pomocou znakov „{“ a „}“. Cieľom je vložiť do zložených zátvoriek číslo, ktoré označuje presný počet opakovaní, ktoré požadujeme. Môžete tiež uviesť rozsah. Pozrime sa na príklady týchto dvoch prípadov.
Najprv nájdeme všetky štvorciferné sekvencie, ktoré existujú:
grep '[0-9]\{4\}' regex
Upozorňujeme, že zložené zátvorky musia byť ukončené, ak používame základné regulárne výrazy, ale nie, ak používame rozšírené. S rozšíreným by to bolo takto:
grep -E '[0-9]{4}' regex
Výsledkom by v obidvoch prípadoch bolo toto:
ArchLinux: 11-03-2002 Gentoo: 31. /2002 CentOS: 14-05-2004 03:32:38 Debian: 16/08/1993 Ubuntu: 20/10 /2004
- Znaky „{“ a „}“ s počtom medzi nimi sa zhodujú s predchádzajúcim znakom a opakovali zadaný počet opakovaní.
Teraz ďalší príklad so zloženými zátvorkami. Predpokladajme, že chceme nájsť slová, ktoré majú 3 až 6 malých písmen. Mohli by sme urobiť nasledovné:
grep '[a-z]\{3,6\}' regex
A výsledok by bol tento:
- Ľista de stranas wiki: TORCHLinux: https: //wiki.Arch Linux.org/ Gpotom: https: //wiki.gentoo.org/wiki/Main_Pvek CzodpovedajúceOS: http: //wiki.CentOS.org/ Debian: https: //wiki.debian.org/ ALEBOUbuntu: https: //wiki.ubuntu.com/ - F.chýba ti de spustenie: TORCH Linux: 11-03-2002 Gpotom: 31. 03. 2002 CzodpovedajúceOs: 14-05-2004 03:32:38 Debian: 16 UUbuntu: 20 Dto je Linux Rulez.
Čo, ako vidíte, veľmi nevyzerá ako to, čo sme chceli. Je to preto, lebo regulárny výraz nájde písmená v iných slovách, ktoré sú dlhšie. Vyskúšajme túto inú verziu:
grep '\<[a-z]\{3,6\}\>' regex
výsledok:
- Zoznam stránok 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/
Toto už vyzerá skôr ako to, čo sme chceli. To, čo sme urobili, je vyžadovať, aby slovo začalo tesne pred prvým písmenom a skončilo tesne po poslednom písmene.
- Znaky „{“ a „}“, ktoré majú medzi sebou dve čísla oddelené čiarkou, sa zhodujú s predchádzajúcim znakom tak často, ako je uvedené týmito dvoma číslami.
Pozrime sa teraz na znak, ktorý je prvočíslom „+“. Je to „*“ a jeho fungovanie je veľmi podobné, iba ak sa zhoduje s ľubovoľným počtom znakov vrátane nuly. To znamená, že robí to isté ako znak „+“, ale nevyžaduje, aby sa v texte objavil znak zľava. Skúsme napríklad vyhľadať tie adresy, ktoré sa začínajú na wiki a končia sa org:
grep 'wiki.*org' regex
Pozrime sa na výsledok:
ArchLinux: https: //wiki.archlinux.org/ Gentoo: https: //wiki.gentoo.org/ wiki / Main_Page CentOS: http: //wiki.centos.org/ Debian: https: //wiki.debian.org/
Perfecto.
Teraz posledná postava, ktorú uvidíme. Znak „\“ sa používa na uniknutie znaku napravo od neho, aby stratil svoj zvláštny význam. Napríklad: Predpokladajme, že chceme vyhľadať priamky, ktoré končia bodom. Prvá vec, ktorá by nás mohla napadnúť, by mohla byť táto:
grep '.$' regex
Výsledok nie je to, čo hľadáme:
- Zoznam wiki stránok: 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/ - Dátumy vydania: Arch Linux: 11. 03. 2002 Gentoo: 312 CentOs: 14-05-2004 03:32:38 Debian: 16. 08. 1993 Ubuntu: 204 Desde Linux Rulez.
Je to preto, lebo „.“ zhoduje sa s čímkoľvek, takže regulárny výraz sa zhoduje s posledným znakom každého riadku, nech už je akýkoľvek. Riešením je toto:
grep '\.$' regex
Teraz chceme dosiahnuť výsledok:
Desde Linux Rulez.
Koniec hry
Aj keď je téma regulárnych výrazov taká zložitá, že by som dal za sériu článkov, myslím si, že už som vám dal dosť bolesti. Ak sa vám podarilo doraziť, gratulujeme. A ak ste to všetko prečítali na jedno posedenie, vezmite si aspirín alebo niečo také, pretože to nemôže byť dobré.
To je zatiaľ všetko. Ak sa vám tento článok páči, možno napíšem ďalší. Medzitým vám odporúčam vyskúšať všetky regulárne výrazy v termináli, aby ste jasne videli, ako fungujú. A pamätajte: Iba Chuck Norris dokáže analyzovať HTML pomocou regulárnych výrazov.
Aký by bol náš život bez regulárneho výrazu?
Článok je veľmi užitočný, ale budem ho čítať kúsok po kúsku. Mnohokrat dakujem.
Ďakujem za komentár. Stále neverím, že môj článok vyšiel. 🙂 Vyšlo to s nejakou chybou, ale dúfam, že je to užitočné. 🙂
Ďakujem youssssssss! ..
Pred časom som si musel niečo naštudovať o regulárnych výrazoch .. ..Ďakujem za poučenie .. a podrobného sprievodcu, ako sa naučiť každý z nich ..
Veľmi dobre! .. .. idem si zobrať ten aspirín .. ee
Nie je začo. Odvaha a to, že regulárne výrazy s vami nemôžu. 🙂
Fantastický príspevok! Dobrá práca. Zaujímalo by ma, koľko hodín ti to trvalo 😀
LOL !! Otázka znie: Koľko hodín by mi trvalo, keby som povedal všetko, čo som chcel povedať? Nekonečné !! 🙂
jednu vec som nevedel, dobrý článok!
Ďakujem. Je radosť sa s vami o ne podeliť.
super vysvetlenie. gratulujem! naozaj užitočné!
Som rád, že ste to považovali za užitočné. Takže je radosť písať.
Toto by malo ísť niečím špeciálne. Rovnako ako odporúčané, ale majú veľmi špecifickú užitočnosť. Celkom užitočné, aj keď by som bol rád, keby sa to vzťahovalo na Vima.
To je otázka, ktorú si kladiem. Mám na mysli ešte niekoľko článkov o regulárnych výrazoch. A mohol som v nich hovoriť o vim. Má určité rozdiely od toho, čo som vysvetlil v tomto článku. Je to otázka toho, ako sa do toho pustiť. 🙂
Dobre!
Váš článok je veľmi dobrý, je kuriózny, nedávno (práve teraz) som na svojej stránke zverejnil príspevok, ktorý som pripravoval niekoľko dní, kde som zhromaždil zoznam metaznakov pre regulárne výrazy a niekoľko príkladov. A bolo fér vstúpiť DesdeLinux a pozrite si príspevok na rovnakú tému!
Ak je to nejaká útecha, moja je Oveľa VIAC PUSSY 😀
Určite sú regulárne výrazy jednou z najužitočnejších vecí. Normálne ich používam na orezanie výstupu príkazov a na uchovanie časti, ktorá ma zaujíma, a potom s ňou interagujem napríklad v skripte bash. Veľa som ich používal aj na univerzite a majú zásadný význam pri konštrukcii prekladačov (pri definovaní lexikografických a parserov). Skrátka celý svet.
Zdravím a veľmi veľmi dobrá práca.
Děkuju mnohokrát.
Páčil sa mi aj váš článok. Je to výstižnejšie ako moje. Môže slúžiť ako rýchla referencia. Je náhoda, že sme ich napísali súčasne. Vidíte, že ľudí táto téma zaujíma. 🙂
Regulárne výrazy pre dummies =), teraz mi je jasnejšie, mimochodom jedným zo spôsobov, ako mať výstup s farbou pre grep, je vytvorenie aliasu v .bashrc alias grep = 'grep –color = always', v prípade niekomu to funguje.
pozdravy
Pravdaže. To je ďalší spôsob, ako to urobiť. Ďakujem za príspevok. 🙂
O_O ... príspevok !!! O_O ...
Ďakujem pekne za príspevok, chvíľu som na niečo také čakal lol, nechávam ho otvorený, aby som si ho pokojne prečítal doma s nulovými problémami s koncentráciou lol.
Ďakujem za článok, naozaj áno 😀
Vedel som, že by sa ti to páčilo. LOL !! Pravda je, že veľa vecí chýba, ale už mám na mysli druhú časť. 🙂
Skvelý článok, keby som si ho prečítal iba včera, trieda, ktorú som dnes dal, by bola pre mojich študentov ešte ľahšia!
LOL !! Škoda, že som meškal, ale som rád, že je to užitočné. 🙂
Konečne !!!, super dobrý príspevok .... Nakoniec som našiel niečo, čo jasne vysvetľuje regulárne výrazy ... ..
Existuje veľa informácií, ale je ťažšie nájsť niečo, čo je ľahko pochopiteľné. Som rád, že som vyplnil túto medzeru. 🙂
Zdravím.
Hej, potrebujem pomoc, musím vyhľadať v / var / logs s formátom: yymmdd a logy prichádzajú ako 130901.log -130901.log, musím vyhľadať všetky, ktoré sú od 1. septembra do 11. októbra „Jediné, čo sa mi podarilo urobiť, bolo odstrániť celý september, ale neviem, ako urobiť celý reťazec:
napr .: 1309 [0-3] vráti protokoly medzi 1. až 30. septembrom, ale neviem, ako ich získať tiež v rovnakom reťazci od 1. do 11. októbra.
Robiť to pomocou regulárnych výrazov je trochu komplikované. Napadá ma, že by niečo také mohlo fungovať:
13(09[0-3]|10(0|1[01]))
Je to rozšírený regulárny výraz. Nehovoríte, ktorý nástroj používate, takže vám nemôžem poskytnúť viac podrobností.
Mimochodom, myslím si, že je to tak, namiesto použitia regulárnych výrazov je lepšie to urobiť pomocou find. Môžete vyskúšať niečo také:
Nájsť. -novinka '01 sep '-a! -novinka '11 oct '-tlač
Šťastie. Dúfam, že vám to môže pomôcť.
Ahoj! Najprv by som sa chcel poďakovať za tvoju prácu, pretože táto stránka patrí medzi moje „top 3“ najlepších linuxových stránok.
Cvičil som a nevedel som, prečo mi nefunguje RegExp na telefónnom čísle a bolo to, že mi chýbalo «-E» (čo som si uvedomil vďaka tomuto príspevku).
Chcel som sa vás opýtať, či nepoznáte kvalitný pdf alebo web, kde sú cvičenia na RegExp, aj keď pri troche fantázie si môžete vyskúšať ich vymyslenie sami.
Zdravím ťa, Pablo.
Veľmi dobré, iba som si to celé prečítal a áno, teraz potrebujem aspirín 🙂
Najlepšie vysvetlenie regulárnych výrazov, aké som videl. Ďakujem autorovi za zdieľanie tejto práce.
Pozdrav.
Veľmi sa mi páčilo veľmi dobré vysvetlenie