S Terminálem: Používání regulárních výrazů

Jednou z věcí, které se mi na terminálu Linux vždy líbily, je to, čeho můžete dosáhnout pomocí regulárních výrazů. Ať už potřebujeme najít komplikovaný text nebo ho nahradit jiným, použití regulárních výrazů může práci velmi zjednodušit. Začněme od začátku:

UPOZORNĚNÍ: Tento příspěvek je bolest v zadku. Čtení tohoto příspěvku po celou dobu může způsobit ztrátu vědomí. Než si přečtete celý příspěvek, udělejte si mezi nimi přestávky nebo se poraďte se svým lékařem nebo lékárníkem.

Co je regulární výraz?

Regulární výraz je řada speciálních znaků, které nám umožňují popsat text, který chceme najít. Pokud bychom například chtěli vyhledat slovo „linux“, stačilo by toto slovo vložit do programu, který používáme. Samotné slovo je regulární výraz. Zatím to vypadá velmi jednoduše, ale co když chceme najít všechna čísla v určitém souboru? Nebo všechny řádky, které začínají velkým písmenem? V takových případech již nemůžete napsat jednoduché slovo. Řešením je použití regulárního výrazu.

Regulární výrazy vs. vzory souborů.

Než se pustím do regulárních výrazů, chci vyjasnit běžné nedorozumění ohledně regulárních výrazů. Regulární výraz není to, co zadáváme jako parametr v příkazech, jako je rm, cp atd., Které odkazují na různé soubory na pevném disku. To by byl vzor souboru. Regulární výrazy, i když jsou podobné v tom, že používají některé běžné znaky, se liší. Vzor souboru se aktivuje proti souborům na pevném disku a vrátí ty, které se zcela shodují se vzorem, zatímco regulární výraz se aktivuje proti textu a vrátí řádky, které obsahují hledaný text. Například regulární výraz odpovídající vzoru *.* bylo by to něco jako ^.*\..*$

Druhy regulárních výrazů.

Ne všechny programy používají stejné regulární výrazy. Ne o moc méně. Existuje několik více či méně standardních typů regulárních výrazů, ale existují programy, které mírně mění syntaxi, obsahují vlastní přípony nebo dokonce používají úplně jiné znaky. Proto, pokud chcete použít regulární výrazy s programem, který neznáte dobře, nejprve se podívejte do příručky nebo dokumentace k programu a podívejte se, jaké jsou regulární výrazy, které rozpoznává.

Nejprve existují dva hlavní typy regulárních výrazů, které jsou obsaženy ve standardu POSIX, což používají nástroje Linux. Jsou to základní a rozšířené regulární výrazy. Mnoho příkazů, které fungují s regulárními výrazy, například grep nebo sed, vám umožňuje používat tyto dva typy. Budu o nich mluvit níže. Existují také regulární výrazy ve stylu PERL a pak existují programy jako vim nebo emacs, které používají jejich varianty. V závislosti na tom, co chceme dělat, může být vhodnější použít jedno nebo druhé.

Testování regulárních výrazů.

Syntaxe regulárních výrazů není vůbec triviální. Když budeme muset napsat složitý regulární výraz, budeme před řetězcem speciálních znaků, kterým na první pohled nebude rozumět, takže abychom se naučili, jak je používat, je nezbytné mít způsob, jak udělat všechny testy, které chceme, a snadno vidět výsledky. Proto nyní vložím několik příkazů, pomocí kterých můžeme provádět testy a experimentovat se vším, co potřebujeme, dokud nebudeme mít dominantní regulární výrazy.

První z nich je příkaz grep. Toto je příkaz, který budeme nejčastěji používat k vyhledávání. Syntaxe je následující:

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

Doporučuji vždy dávat regulární výrazy do jednoduchých uvozovek, aby nás shell nedostal. První způsob je najít regulární výraz v souboru. Druhý umožňuje filtrování výstupu příkazu pomocí regulárního výrazu. Ve výchozím nastavení používá grep základní regulární výrazy. Možnost -E slouží k použití rozšířených regulárních výrazů.

Trik, který nám pomůže zjistit, jak fungují regulární výrazy, je povolit použití barvy v příkazu grep. Tímto způsobem bude zvýrazněna část textu, která odpovídá regulárnímu výrazu, který používáme. Chcete-li aktivovat barvu v příkazu grep, ujistěte se, že je proměnná prostředí GREP_OPTIONS obsahovat v hodnotě --color, které lze provést pomocí tohoto příkazu:

GREP_OPTIONS=--color

Můžeme to dát do .bashrc, abychom to měli vždy aktivované.

Další způsob použití regulárních výrazů je pomocí příkazu sed. To je vhodnější pro nahrazení textu, ale lze jej použít také pro vyhledávání. Syntaxe by vypadala takto:

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

Příkaz sed ve výchozím nastavení také používá základní regulární výrazy, rozšířené regulární výrazy můžete použít s volbou -r.

Další příkaz, který také chci pojmenovat, je awk. Tento příkaz lze použít k mnoha věcem, protože umožňuje psát skripty ve vašem vlastním programovacím jazyce. Pokud chceme najít regulární výraz v souboru nebo na výstupu příkazu, způsob jeho použití by byl následující:

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

Tento příkaz vždy používá rozšířené regulární výrazy.

K provedení našich testů budeme také potřebovat text, který slouží jako příklad pro vyhledávání v něm. Můžeme použít následující 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, který použiji pro příklady ve zbytku příspěvku, takže doporučuji zkopírovat jej do souboru, abyste jej měli po ruce z terminálu. Můžete zadat požadované jméno. Říkal jsem tomu regulární výraz.

Počáteční lekce.

Nyní máme vše, co potřebujete k zahájení testování regulárních výrazů. Pojďme kousek po kousku. Uvedu několik příkladů vyhledávání s regulárními výrazy, ve kterých vysvětlím, k čemu každá postava slouží. Nejsou to moc dobré příklady, ale protože budu mít velmi dlouhý příspěvek, už to nechci komplikovat. A já jen poškrábám povrch toho, co lze udělat pomocí regulárních výrazů.

Nejjednodušší ze všeho je vyhledat konkrétní slovo, například předpokládejme, že chceme najít všechny řádky, které obsahují slovo „Linux“. To je nejjednodušší, protože musíme psát pouze:

grep 'Linux' regex

A můžeme vidět výsledek:

ObloukLinux: https://wiki.archlinux.org/ Arch Linux: 11-03-2002 od Linux Rulez.

Jedná se o tři řádky, které obsahují slovo „Linux“, které, pokud jsme použili barevný trik, se objeví zvýrazněné. Všimněte si, že rozpoznává slovo, které hledáme, i když je součástí delšího slova jako v „ArchLinuxu“. Nezvýrazňuje však slovo „linux“, které se objevuje v adrese URL „https://wiki.archlinux.org/“. Je to proto, že se tam objevuje s malými písmeny „l“ a my jsme to hledali velkými písmeny. Příkaz grep má pro to možnosti, ale nebudu o nich mluvit v článku o regulárních výrazech.

Pomocí tohoto jednoduchého testu můžeme vyvodit první závěr:

  • Normální znak vložený do regulárního výrazu se shoduje.

Což znamená, že pokud vložíte písmeno „a“, bude hledat písmeno „a“. Zdá se to logické, že? 🙂

Nyní předpokládejme, že chceme vyhledat slovo „CentO“ následované libovolným znakem, ale pouze jedním znakem. K tomu můžeme použít znak „.“, Což je zástupný znak, který odpovídá libovolnému znaku, ale pouze jednomu:

grep 'CentO.' regex

A výsledek je:

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

Což znamená, že obsahuje „S“ v „CentOS“, i když v jednom případě je velká a v druhém malá. Pokud by se na tom místě objevila nějaká jiná postava, zahrnovala by ji také. Druhé pravidlo již máme:

  • Postava "." odpovídá libovolnému znaku.

Už to není tak banální, jak se zdálo, ale s tím nemůžeme udělat moc. Pojďme trochu dále. Předpokládejme, že chceme najít řádky, ve kterých se objevují roky 2002 a 2004. Vypadají jako dvě hledání, ale lze je provést najednou takto:

grep '200[24]' regex

Což znamená, že chceme najít číslo 200 následované 2 nebo 4. Výsledkem je toto:

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

Což nás přivádí k třetímu pravidlu:

  • Více znaků uzavřených v závorkách odpovídá všem znakům v závorkách.

Konzoly poskytují více hry. lze je také použít k vyloučení znaků. Předpokládejme například, že chceme najít weby, kde se objeví znak „:“, ale za ním není znak „/“. Příkaz by vypadal takto:

grep ':[^/]' regex

Jednoduše jde o to, abyste do závorky vložili jako první znak „^“. Níže můžete zadat všechny požadované znaky. Výsledek tohoto posledního příkazu je následující:

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. 03. 2002 Gentoo: 31. 03. 2002 CentOs: 14 05--2004 03:32:38 Debian: 16. 08. 1993 Ubuntu: 20/10/2004

Nyní jsou za názvy distribucí zvýrazněny znaky „:“, nikoli však ty v adresách URL, protože adresy URL mají za sebou „/“.

  • Vložení znaku „^“ na začátek závorky odpovídá libovolnému znaku kromě ostatních znaků v závorce.

Další věcí, kterou můžeme udělat, je zadat rozsah znaků. Například pro hledání libovolného čísla následovaného znakem „-“ by to vypadalo takto:

grep '[0-9]-' regex

Tímto určujeme znak mezi 0 a 9 a poté znaménko minus. Uvidíme výsledek:

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

V hranatých závorkách lze zadat více rozsahů, které rovnoměrně kombinují rozsahy s jednotlivými znaky.

  • Umístění dvou znaků oddělených znakem „-“ do hranatých závorek odpovídá libovolnému znaku v rozsahu.

Podívejme se nyní, jestli můžeme vybrat první část adres URL. Ten, který říká „http“ nebo „https“. Liší se pouze v závěrečném „s“, udělejme to takto:

grep -E 'https?' regex

Otazník slouží k tomu, aby byl znak vlevo volitelný. Ale nyní jsme do příkazu přidali možnost -E. Důvodem je, že dotazování je funkce rozšířených regulárních výrazů. Doposud jsme používali základní regulární výrazy, takže nebylo třeba nic uvádět. Uvidíme výsledek:

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 již máme nové pravidlo:

  • Znak následovaný znakem „?“ odpovídá tomuto znaku nebo žádnému. To platí pouze pro rozšířené regulární výrazy.

Nyní budeme hledat dvě úplně jiná slova. Podívejme se, jak najít řádky, které obsahují slovo „Debian“ i „Ubuntu“.

grep -E 'Debian|Ubuntu' regex

Se svislou čarou můžeme oddělit dva nebo více různých regulárních výrazů a hledat řádky, které odpovídají kterémukoli z nich:

Debian: https://wiki.debian.org/
ubuntu: https://wiki.ubuntu.com/
Debian: 16 / 08 / 1993
ubuntu: 20 / 10 / 2004
  • Znak "|" slouží k oddělení více regulárních výrazů a odpovídá kterémukoli z nich. Je také specifický pro rozšířené regulární výrazy.

Pokračujme. Nyní budeme hledat slovo „Linux“, ale pouze tam, kde není přilepeno k jinému slovu nalevo. Můžeme to udělat takto:

grep '\

Zde je důležitý znak „<“, ale je třeba jej uniknout vložením „\“ před něj, aby jej grep interpretoval jako speciální znak. Výsledek je následující:

Oblouk Linux: 11-03-2002 od Linux Rulez.

Můžete také použít "\>" k hledání slov, která nejsou přímo vedle sebe. Pojďme na příklad. Zkusme tento příkaz:

grep 'http\>' regex

Výstup, který produkuje, je tento:

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

„Http“ vyšel, ale ne „https“, protože v „https“ je stále znak napravo od „p“, který může být součástí slova.

  • Znaky „<“ a „>“ se shodují se začátkem a koncem slova. Těmto znakům musí být uvozeno, aby nebyly interpretovány jako doslovné znaky.

Jdeme s věcmi trochu komplikovanějšími. Znak „+“ odpovídá znaku nalevo, alespoň jednou se opakuje. Tento znak je k dispozici pouze s rozšířenými regulárními výrazy. S ním najdeme například sekvence několika čísel v řadě, které začínají znakem „:“.

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

výsledek:

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

Číslo 38 je také zvýrazněno, protože také začíná „:“.

  • Znak „+“ odpovídá znaku nalevo, alespoň jednou se opakuje.

Počet opakování můžete také ovládat pomocí „{“ a „}“. Cílem je vložit do závorek číslo, které označuje přesný počet opakování, které chceme. Můžete také zadat rozsah. Podívejme se na příklady těchto dvou případů.

Nejprve najdeme všechny čtyřciferné sekvence, které existují:

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

Všimněte si, že složené závorky musí být ukončeny, pokud používáme základní regulární výrazy, ale ne, pokud používáme rozšířené. S prodlouženým by to bylo takto:

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

Výsledkem by v obou případech bylo toto:

ArchLinux: 11-03-2002
Gentoo: 31/03 /2002
CentOS: 14-05-2004 03:32:38
Debian: 16/08/1993
Ubuntu: 20/10 /2004
  • Znaky „{“ a „}“, jejichž počet je mezi nimi, se shodují s předchozím znakem a opakují zadaný počet opakování.

Nyní další příklad se složenými závorkami. Předpokládejme, že chceme najít slova, která mají 3 až 6 malých písmen. Mohli bychom udělat následující:

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

A výsledek by byl tento:

- L.ist de stranas wiki: TOrchLinux: https:/ /wiki.archlinux.org/ Gpak: https:/ /wiki.gentoo.org/wiki/Main_Pstáří
CentOS: http:/ /wiki.CentOS.org/ Debian: https:/ /wiki.debian.org/ NEBOslepá ulička: https:/ /wiki.ubuntu.com/ - F.Vám chybí de spuštění: TOrch Linux: 11-03-2002 Gpak: 31/03/2002 CentOs: 14-05-2004 03:32:38
Debian: 16. 08. 1993 Uslepá ulička: 20 Dto je Linux Rulez.

Což, jak vidíte, nevypadá moc jako to, co jsme chtěli. Je to proto, že regulární výraz najde písmena v jiných slovech, která jsou delší. Zkusme tuto jinou verzi:

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

výsledek:

- Seznam stránek 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/

Už to vypadá spíše jako to, co jsme chtěli. To, co jsme udělali, je vyžadovat, aby slovo začalo těsně před prvním písmenem a skončilo těsně po posledním.

  • Znaky „{“ a „}“ se dvěma číslicemi oddělenými čárkou se shodují s předchozím znakem tolikrát, kolikrát je označeno dvěma čísly.

Pojďme se nyní podívat na postavu, která je vrcholem „+“. Je to „*“ a jeho fungování je velmi podobné, pouze pokud odpovídá libovolnému počtu znaků včetně nuly. To znamená, že dělá to samé jako „+“, ale nevyžaduje, aby se v jeho textu objevil znak nalevo. Zkusme například hledat ty adresy, které začínají na wiki a končí org:

grep 'wiki.*org' regex

Uvidíme výsledek:

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

Perfektní.

Nyní poslední postava, kterou uvidíme. Znak "\" se používá k úniku znaku napravo, aby ztratil svůj zvláštní význam. Například: Předpokládejme, že chceme vyhledat čáry, které končí bodem. První věc, která by nás mohla napadnout, by mohla být tato:

grep '.$' regex

Výsledek není to, co hledáme:

- Seznam wiki stránek:
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/
- Data vydání: 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.

Je to proto, že „.“ odpovídá čemukoli, takže regulární výraz odpovídá poslednímu znaku každého řádku, ať už je jakýkoli. Řešení je toto:

grep '\.$' regex

Výsledkem je to, co chceme:

Desde Linux Rulez.

Konec hry

I když je předmět regulárních výrazů tak složitý, že bych ho dal za řadu článků, myslím, že jsem vám již dal dost bolesti. Pokud se vám podařilo dorazit, gratulujeme. A pokud jste to všechno přečetli na jedno sezení, vezměte si aspirin nebo tak něco, protože to nemůže být dobré.

To je zatím vše. Pokud se vám tento článek líbí, možná bych mohl napsat další. Mezitím vám doporučuji vyzkoušet všechny regulární výrazy v terminálu, abyste jasně viděli, jak fungují. A pamatujte: Pouze Chuck Norris dokáže analyzovat HTML pomocí regulárních výrazů.


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   Ezekiel řekl

    Jaký by byl náš život bez regexu?
    Článek je velmi užitečný, ale budu ho číst kousek po kousku. Díky moc.

    1.    hexborg řekl

      Děkuji za komentář. Stále nevěřím, že můj článek vyšel. 🙂 Vyšlo to s nějakou chybou, ale doufám, že je to užitečné. 🙂

  2.   Scalibur řekl

    Děkuji youssssssss! ..

    Kdysi dávno jsem si musel trochu prostudovat regulární výrazy .. .. Děkuji za výuku .. a podrobného průvodce, jak se každý z nich naučit ..

    Velmi dobře! .. .. vezmu si ten aspirin .. ee

    1.    hexborg řekl

      Nemáš zač. Odvaha a regulární výrazy s vámi nemohou. 🙂

  3.   tanrax řekl

    Fantastický příspěvek! Dobrá práce. Zajímalo by mě, kolik hodin ti to trvalo 😀

    1.    hexborg řekl

      LOL !! Otázka zní: Kolik hodin by mi trvalo, kdybych řekl všechno, co jsem chtěl říct? Nekonečné !! 🙂

  4.   Tammuz řekl

    jednu věc jsem nevěděl, dobrý článek!

    1.    hexborg řekl

      Děkuji. Je potěšením se o to s vámi podělit.

  5.   helena_ryuu řekl

    skvělé vysvětlení. gratulujeme! opravdu užitečné!

    1.    hexborg řekl

      Jsem rád, že vám to přišlo užitečné. Je mi potěšením psát.

  6.   proti řekl

    Mělo by to být něco zvláštního. Stejně jako Doporučené, ale mají velmi konkrétní užitečnost. Docela užitečné, i když bych byl rád, kdyby se to vztahovalo na Vima.

    1.    hexborg řekl

      To je otázka na sebe. Mám na mysli několik dalších článků o regulárních výrazech. A mohl jsem v nich mluvit o vim. Má určité rozdíly od toho, co jsem vysvětlil v tomto článku. Jde o to, jak se do toho pustit. 🙂

  7.   Fernando řekl

    Dobrý!

    Váš článek je velmi dobrý, je kuriózní, nedávno (právě teď) jsem na svém webu zveřejnil záznam, který jsem pár dní připravoval, kde jsem shromáždil seznam metaznaků pro regulární výrazy a pár příkladů. A bylo fér vstoupit DesdeLinux a podívejte se na záznam na stejné téma!

    Pokud je to útěcha, moje je MNOHEM PUSSY 😀

    Regex je určitě jedna z nejužitečnějších věcí, obvykle je používám k oříznutí výstupu příkazů a zachování části, která mě zajímá, a pak s ní například komunikuji v bash skriptu. Hodně jsem je také používal na univerzitě a mají zásadní význam při konstrukci překladačů (v definici lexikografických a analyzátorů). Stručně řečeno, celý svět.

    Zdravím a velmi velmi dobrá práce.

    1.    hexborg řekl

      Děkuju mnohokrát.

      Také se mi líbil váš článek. Je to stručnější než moje. Může sloužit jako rychlá reference. Je náhoda, že jsme je napsali současně. Vidíte, že lidi tento předmět zajímá. 🙂

  8.   Elery řekl

    Regulární výrazy pro dummies =), nyní je mi jasnější, mimochodem jedním ze způsobů, jak mít výstup s barvou pro grep, je vytvoření aliasu v .bashrc alias grep = 'grep –color = always', v případě pro někoho to funguje.

    pozdravy

    1.    hexborg řekl

      Skutečný. To je další způsob, jak to udělat. Díky za vstup. 🙂

  9.   KZKG ^ Gaara řekl

    O_O… příspěvek !!! O_O ...
    Moc děkuji za příspěvek, chvíli jsem na něco takového čekal lol, nechávám to otevřené, abych si to klidně přečetl doma s nulovými potížemi soustředit lol.

    Díky za článek, opravdu ano 😀

    1.    hexborg řekl

      Věděl jsem, že by se ti to líbilo. LOL !! Pravdou je, že mnoho věcí chybí, ale mám už na mysli druhou část. 🙂

  10.   Eliecer Tates řekl

    Skvělý článek, jen kdybych si ho přečetl včera, třída, kterou jsem dnes dal, by byla pro mé studenty ještě snazší!

    1.    hexborg řekl

      LOL !! Škoda, že jsem se opozdil, ale jsem rád, že je to užitečné. 🙂

  11.   LeoToro řekl

    Konečně !!!, super dobrý příspěvek .... Nakonec jsem našel něco, co jasně vysvětluje regulární výrazy ... ..

    1.    hexborg řekl

      Existuje spousta informací, ale je obtížnější najít něco, co je snadno srozumitelné. Jsem rád, že jsem tuto mezeru zaplnil. 🙂

      Zdravím.

  12.   Shakespeare Rhodos řekl

    Hey I need help, I have to do a search in / var / logs with the format: yymmdd, and the logs come like this 130901.log -130901.log, I have to search all those that are between September 1 to October 11 Jediná věc, kterou se mi podařilo udělat, bylo odstranit celý září, ale nevím, jak udělat celý řetězec:

    Příklad: 1309 [0-3] vrací protokoly od 1. do 30. září, ale nevím, jak je také získat ve stejném řetězci od 1. do 11. října.

    1.    hexborg řekl

      Udělat to pomocí regulárních výrazů je trochu komplikované. Napadá mě, že by něco takového mohlo fungovat:

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

      Je to rozšířený regulární výraz. Neříkáte, který nástroj používáte, takže vám nemohu poskytnout více podrobností.

      Každopádně si myslím, že je to tak, místo použití regulárních výrazů je lepší to udělat s find. Můžete zkusit něco takového:

      nalézt. -novinka '01 září '-a! -newermt '11 oct '-print

      Štěstí. Doufám, že vám to může pomoci.

  13.   chipo řekl

    Ahoj! Nejprve bych vám chtěl poděkovat za vaši práci, protože tato stránka patří mezi mé „top 3“ nejlepších linuxových webů.
    Cvičil jsem a nevěděl jsem, proč mi nefunguje RegExp na telefonním čísle a že mi chybí „-E“ (což jsem si uvědomil díky tomuto příspěvku).
    Chtěl jsem se vás zeptat, jestli neznáte dobrý soubor PDF nebo web, kde jsou cvičení na RegExp, i když s trochou fantazie si můžete procvičit jejich vymýšlení sami.

    Zdravím, Pable.

  14.   cally řekl

    Velmi dobře, jen jsem si to všechno přečetl, a ano, teď potřebuji aspirin 🙂

  15.   Oskar řekl

    Nejlepší vysvětlení regulárních výrazů, jaké jsem viděl. Děkuji autorovi za sdílení této práce.

    Pozdrav.

  16.   Alexadere řekl

    Opravdu se mi líbilo velmi dobré vysvětlení