Grep Regex Kompletný sprievodca


Úvod

Pokiaľ ide o spracovanie a analýzu údajov, Grep Regex je výkonný nástroj na vyhľadávanie vzorov v texte. Bežne sa používa medzi vývojármi, systémovými administrátormi a dátovými analytikmi, ktorí potrebujú hľadať špecifické reťazce alebo extrahovať relevantné informácie z veľkých objemov dát.

Grep je skratka pre „Global Regular Expression Print“ a označuje pomôcku príkazového riadka, ktorá hľadá vzory v súboroch alebo výstupných prúdoch. Regulárne výrazy (Regex) sú sekvenciou znakov, ktoré definujú vzor, ktorý možno použiť na vyhľadávanie alebo manipuláciu s textom.

Začíname s Grep Regex

Inštalácia Grepu na rôzne platformy

Pred ponorením sa do sveta Grep Regex je dôležité najprv nainštalovať Grep na váš počítač. Proces inštalácie sa môže líšiť v závislosti od platformy, ktorú používate.

Pre používateľov Unixu a Linuxu je Grep zvyčajne už nainštalovaný. Pre používateľov Windowsu si však budete musieť stiahnuť a nainštalovať príslušnú verziu Grepu pre váš operačný systém.

Používatelia počítačov Mac si ho môžu nainštalovať prostredníctvom Homebrew alebo stiahnutím balíka z jeho oficiálnej webovej stránky. Po úspešnej inštalácii Grep na váš počítač ste pripravení začať ho používať.

Základná syntax a príkazy

Grep je nástroj príkazového riadka, ktorý vám umožňuje vyhľadávať vzory v textových súboroch. Jeho základná syntax je -

grep [options] pattern [file...]  

„vzor“ predstavuje vzor regulárneho výrazu, ktorý chcete vyhľadať v jednom alebo viacerých súboroch špecifikovaných v „[súbor...]“. Stojí za zmienku, že ak nie je zadaný žiadny súbor, vstup bude prevzatý z `stdin`.

S grep je k dispozícii niekoľko možností, ktoré môžu upraviť svoje správanie na základe vašich konkrétnych potrieb. Napríklad,

  • * `-i` určuje vyhľadávanie bez ohľadu na veľkosť písmen.

  • * `-r` rekurzívne prehľadáva všetky súbory v adresári.

  • * `-l` vytlačí iba názvy súborov, ktoré zodpovedajú vzoru.

  • * `-n` vytlačí čísla riadkov spolu s nájdenými zhodami.

Pochopenie regulárnych výrazov

Regulárne výrazy (Regex) tvoria podstatnú časť grep, pretože špecifikujú vzor(y), ktoré sa majú hľadať v textových súboroch. Existuje niekoľko prvkov vzorov regulárneho výrazu, ktoré môžu zahŕňať −

  • * Metaznaky − znaky, ktoré majú špeciálny význam v rámci syntaxe regulárneho výrazu (napr. '^', '<span>$').

  • * Triedy znakov – množiny znakov v hranatých zátvorkách (napr. [a-z]), ktoré sa používajú na priradenie konkrétnych typov alebo rozsahov znakov.

  • * Kvantifikátory – určujú, koľkokrát sa má konkrétny vzor vyskytnúť (napr. „*“, „+“, „?“).

  • * Zoskupovanie a zachytávanie – umožňujú zoskupovanie vzorov, ako aj ich zachytávanie pre neskoršie použitie.

  • * Lookarounds − používa sa na pozeranie dopredu alebo dozadu v texte bez toho, aby to bolo skutočne zahrnuté do zápasu.

Pochopenie týchto prvkov je kľúčové pri práci s grep regex, pretože vám môžu pomôcť vytvoriť výkonnejšie a presnejšie vzory vyhľadávania.

Regulárne výrazy v hĺbke

Triedy a rozsahy postáv: Stavebné kamene Regexu

V regulárnych výrazoch sa triedy znakov používajú na priradenie množiny znakov. Triedy znakov sú uzavreté v hranatých zátvorkách- [ ] a môžu obsahovať jeden znak alebo rozsah znakov. Napríklad regulárny výraz [aeiou] bude zodpovedať akejkoľvek samohláske v texte, zatiaľ čo výraz [a-z] bude zodpovedať akémukoľvek malému písmenu.

Triedy znakov možno navyše negovať pridaním znaku (^) pred neho. Napríklad [^0-9] zodpovedá všetkému okrem číslic.

Príklady

Priraďte ľubovoľnú číslicu −

grep "[0-9]" file.txt

Priraďte akékoľvek malé písmeno −

grep "[a-z]" file.txt

Priraďte akékoľvek veľké písmeno −

grep "[A-Z]" file.txt

Priraďte akékoľvek písmeno (malé alebo veľké) −

grep "[a-zA-Z]" file.txt

Porovnajte akýkoľvek alfanumerický znak −

grep "[a-zA-Z0-9]" file.txt

Kvantifikátory a alternácia: Flexibilnejší regulárny výraz

Kvantifikátory určujú, koľkokrát sa má predchádzajúci znak objaviť v texte. Napríklad „a{2,3}“ znamená, že v texte by mali byť 2 až 3 susediace znaky „a“.

Striedanie je ďalší základný koncept, ktorý vám umožňuje špecifikovať viacero vzorov oddelených zvislou čiarou (|). Týmto spôsobom môžete spárovať ktorýkoľvek z nich.

Príklady

Priraďte jeden alebo viacero výskytov písmena „a“ −

grep 'a+' file.txt

Porovnajte nula alebo viac výskytov slova „jablko“ −

grep 'apple*' file.txt

Nájdite presne tri výskyty číslice „0“ −

grep '0{3}' file.txt

Priraďte buď „mačka“ alebo „pes“ −

grep 'cat|dog' file.txt

Spojte buď „jablko“, „banán“ alebo „pomaranč“ −

grep 'apple|banana|orange' file.txt

Zoskupovanie a zachytávanie: Vytváranie podvzorov pre komplexné zhody

Zoskupenie sa vzťahuje na uzavretie častí vášho vzoru do zátvoriek „()“. Zoskupenie je dôležité, keď chcete použiť kvantifikátory alebo alternácie na konkrétne časti vášho vzoru. Okrem toho pomáha s čitateľnosťou a organizáciou.

Zachytenie znamená extrahovanie konkrétnych častí zhodného reťazca pomocou zátvoriek, ktoré označujú skupiny zachytávania. Na neskorší prístup k zachyteným skupinám alebo ich odkazovanie v rámci samotného vzoru; používame spätné referencie.

Príklady

Zhoda opakovaných znakov:

$ echo "Helloooo" | grep -oE '(o+)\1'

Výkon

oooo

Extrahovanie e-mailových adries −

$ echo "Contact us at email@example.com or support@example.com" | grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'

Výkon

email@example.com
support@example.com

Vytiahnutie telefónnych čísel −

$ echo "Contact us at +1-555-123-4567 or 123-456-7890" | grep -oE '(\+?[0-9]+-)?[0-9]{3}-[0-9]{3}-[0-9]{4}'

Výkon

+1-555-123-4567
123-456-7890

Priraďovanie značiek HTML a zachytávanie obsahu −

$ echo "<h1>Title</h1><p>Paragraph</p>" | grep -oE '<(\w+)>.*<\/\1>'

Výkon

<h1>Title</h1>

<p>Paragraph</p>

Extrahovanie dátumov v špecifickom formáte −

$ echo "Today's date is 2023-06-15" | grep -oE '([0-9]{4})-([0-9]{2})-([0-9]{2})'

Výkon

2023-06-15

Alternatívy: Pokročilé techniky na kontextovú zhodu textu

Lookarounds je pokročilá technika, ktorá umožňuje regulárnemu enginu pozerať sa dopredu alebo dozadu na konkrétne pozície bez toho, aby sa tieto pozície zhodovali. Existujú dva typy obhliadok −

  • Positive Lookahead – zhoduje sa s predchádzajúcim vzorom, iba ak za ním nasleduje špecifický text.

  • Negative Lookahead − zhoduje sa s predchádzajúcim vzorom, iba ak po ňom nenasleduje špecifický text. Obhliadky možno použiť v situáciách, keď potrebujete nájsť zhodu s reťazcom, ale iba ak spĺňa určité podmienky (napríklad výskyt za alebo pred určitým slovom).

Pokročilé techniky s Grep Regex

Používanie príznakov na úpravu správania

Príznaky sa používajú v Grep Regex na úpravu správania regulárnych výrazov. Môžete napríklad použiť príznaky ako -i na vyhľadávanie bez ohľadu na malé a veľké písmená alebo -w iba na vyhľadávanie slov.

Okrem toho môžete použiť príznaky ako -v na invertovanie vyhľadávania a zobrazenie iba riadkov, ktoré sa nezhodujú so vzorom. Môžete kombinovať viacero vlajok a prispôsobiť si vyhľadávanie podľa svojich požiadaviek.

Príklady

-i alebo --ignore-case: Ignoruje rozlíšenie veľkých a malých písmen pri porovnávaní. Napríklad -

grep -i "apple" file.txt

-v alebo --invert-match: Invertuje zhodu, t. j. vytlačí len riadky, ktoré sa nezhodujú so vzorom. Napríklad -

grep -v "apple" file.txt

-w alebo --word-regexp: Zhoduje sa iba s celými slovami. Napríklad -

grep -w "apple" file.txt

-x alebo --line-regexp: Zhoduje sa iba s celými riadkami. Napríklad -

grep -x "apple" file.txt

-m N alebo --max-count=N: Zastaví sa po nájdení N zhôd. Napríklad na nájdenie prvých 5 výskytov vzoru −

grep -m 5 "apple" file.txt

-r alebo --recursive: Vyhľadáva rekurzívne v adresároch. Napríklad -

grep -r "apple" /path/to/directory

Kombinácia viacerých vzorov

Môžete kombinovať viacero vzorov v jednom príkaze Grep pomocou logických operátorov, ako je | (ALEBO) a & (A). To vám umožňuje vykonávať komplexnejšie vyhľadávania, kde chcete nájsť zhodu riadkov, ktoré obsahujú jeden z dvoch vzorov alebo oba vzory súčasne. Okrem toho môžete použiť zátvorky na zoskupenie rôznych častí vášho vzoru a vytvorenie podvzorov, ktoré sa kombinujú.

Príklady

Hľadanie riadkov, ktoré obsahujú „jablko“, ale nie „banán“ −

grep -E 'apple' filename.txt | grep -v 'banana'

Vyhľadávanie riadkov, ktoré obsahujú „jablko“ alebo „banán“, ale nie „pomaranč“ −

grep -E 'apple|banana' filename.txt | grep -v 'orange'

Extrahovanie údajov pomocou skupín zachytávania

Skupiny zachytávania vám umožňujú extrahovať špecifické údaje zo zhodného vzoru tak, že ho uzatvoríte do zátvoriek. Napríklad, ak chcete zo súboru extrahovať všetky e-mailové adresy, môžete použiť zachytávaciu skupinu okolo vzoru e-mailových adries a potom vytlačiť iba zachytené skupiny. Táto technika je užitočná pri práci s veľkými súbormi údajov, kde je potrebné extrahovať špecifické informácie.

Príklady

Extrahovanie e-mailových adries zo súboru −

grep -Eo '([A-Za-z0-9._%+-]+)@([A-Za-z0-9.-]+)\.([A-Za-z]{2,})' file.txt

Extrahovanie telefónnych čísel v špecifickom formáte −

grep -Eo '(\+\d{1,2})?(\d{3}-\d{3}-\d{4})' file.txt

Extrahovanie adries URL z webovej stránky −

grep -Eo 'href="([^"]+)"' file.html

Extrahovanie IP adries zo súboru denníka −

grep -Eo '(\d{1,3}\.){3}\d{1,3}' file.log

Záver

Grep Regex je výkonný nástroj, ktorý umožňuje dátovým analytikom rýchlo vyhľadávať, filtrovať a extrahovať dáta z veľkých dátových súborov. Ovládaním regulárnych výrazov môžete jednoducho filtrovať tisíce alebo dokonca milióny záznamov v priebehu niekoľkých sekúnd, čo vám ušetrí drahocenný čas a námahu. Schopnosť písať zložité vzory pomocou správnej kombinácie operátorov a znakov môže výrazne zlepšiť vašu produktivitu, čo vám umožní sústrediť sa na dôležitejšie úlohy.