Ako grepovať viac reťazcov, vzorov alebo slov?


Úvod

Grep je jedným z najvýkonnejších a najpoužívanejších nástrojov príkazového riadku v systémoch Linux/Unix. Je to skratka pre „Global Regular Expression Print“ a používa sa na vyhľadávanie textových súborov alebo výstup príkazov pre špecifické vzory alebo reťazce.

Dokáže prehľadávať celú adresárovú štruktúru, filtrovať výsledky a zobrazovať používateľovi iba relevantné údaje. Grep je všestranný nástroj, ktorý možno použiť na mnoho rôznych úloh vrátane správy systému, programovania a analýzy údajov.

Základné príkazy Grep

Grep je výkonný nástroj príkazového riadka používaný v operačných systémoch založených na Unixe na vyhľadávanie špecifických vzorov alebo reťazcov textu v súboroch alebo výstupe z iných príkazov. Základná syntax jednoduchého príkazu grep je nasledovná −

grep [options] pattern [file] 

„Vzor“ je reťazec alebo regulárny výraz, ktorý chcete vyhľadať, a argument „súbor“ určuje názov súboru, v ktorom chcete hľadať.

Ak nie je zadaný žiadny názov súboru, grep bude čítať zo štandardného vstupu (napr. výstup z iného príkazu). Jednou z najbežnejších možností používaných s grep je "-i", vďaka čomu sa pri vyhľadávaní nerozlišujú malé a veľké písmená.

Príklady, ako hľadať jeden reťazec alebo vzor

Ak chcete vyhľadať jeden reťazec v súbore, použite nasledujúcu základnú syntax −

bash grep 'string' filename  

Ak by ste napríklad chceli nájsť všetky výskyty slova „jablko“ v súbore s názvom „ovocie.txt“, použili by ste −

grep 'apple' fruits.txt 

Ak chcete namiesto presného reťazca nájsť zhodu so vzorom, môžete použiť regulárne výrazy s grep.

Napríklad, ak chcete nájsť všetky slová, ktoré začínajú na „a“, za ktorým nasleduje akýkoľvek znak a potom končia na „le“, môžete použiť −

grep 'a.*le' fruits.txt 

To bude zodpovedať slovám ako „jablko“, „schopný“ a „avokádo“.

Pred vyhľadávaním viacerých reťazcov alebo vzorov je nevyhnutné porozumieť základným príkazom Grep, ako sú syntax a možnosti. Vyhľadávanie jednotlivých reťazcov vyžaduje použitie úvodzoviek okolo požadovaného reťazca, zatiaľ čo vyhľadávanie vzorov vyžaduje použitie regulárnych výrazov.

Hľadanie viacerých reťazcov alebo vzorov

Grep je neuveriteľne výkonný nástroj, ktorý možno použiť na vyhľadávanie viacerých reťazcov alebo vzorov v danom súbore alebo adresári. Grep štandardne vyhľadá v súbore prvý výskyt daného vzoru, ale čo ak chceme nájsť viacero výskytov rôznych vzorov naraz?

Tu sa hodí operátor OR (|). Operátor OR nám umožňuje hľadať viacero reťazcov alebo vzorov súčasne.

Ak chcete použiť túto možnosť, jednoducho vypíšte každý reťazec alebo vzor oddelený symbolom OR. Povedzme napríklad, že chceme nájsť všetky výskyty slov „jablko“ alebo „banán“ v súbore s názvom „ovocie.txt“.

Použili by sme nasledujúci príkaz −

grep 'apple|banana' fruits.txt  

Tento príkaz vráti všetky riadky, ktoré obsahujú buď „jablko“ alebo „banán“. Je dôležité si uvedomiť, že pri použití operátora OR musí byť každý reťazec alebo vzor uzavretý vo vlastnej sade úvodzoviek.

Operátor OR je možné kombinovať aj s ďalšími možnosťami Grep, ako napríklad -i (nerozlišuje veľké a malé písmená), -v (invertuje zhodu) a -r (rekurzívne). Povedzme napríklad, že chceme vyhľadať všetky riadky, ktoré obsahujú buď „jablko“, „banán“ alebo „čerešňa“ v akomkoľvek súbore v adresári s názvom „priečinok_ovocie“.

Použili by sme nasledujúci príkaz −

grep -ir 'apple|banana|cherry' fruits_folder/ 

Hľadanie slov v konkrétnom kontexte

Grep možno použiť na vyhľadávanie konkrétnych slov alebo vzorov v určitom kontexte. Je to užitočné najmä vtedy, keď potrebujete nájsť informácie súvisiace s konkrétnou témou a chcete vidieť časť okolitého textu, aby ste získali viac kontextu. Možnosti kontextu v programe Grep vám umožňujú určiť, koľko riadkov kontextu by sa malo zobraziť pred a/alebo po každom zápase.

Vysvetlenie, ako používať Grep s kontextovými možnosťami (-A, -B, -C)

V Grep sú tri rôzne možnosti kontextu −

  • -A − zobrazí zadaný počet riadkov po každom zápase

  • -B − zobrazuje zadaný počet riadkov pred každým zápasom

  • -C −zobrazí zadaný počet riadkov pred a po každej zhode. Môžete použiť akúkoľvek kombináciu týchto možností v závislosti od toho, aký typ kontextu potrebujete.

Hľadajú sa iba presné zhody

Stalo sa vám niekedy, že ste frustrovaní, keď sa pokúšate vyhľadať presné slovo alebo frázu pomocou funkcie Grep, ale výsledky hľadania tiež prinášajú množstvo čiastočných zhôd? Toto môže byť bežné najmä pri prehľadávaní veľkých súborov s množstvom textu. Našťastie je v Grepe možnosť, ktorá vám umožňuje hľadať iba presné zhody – možnosť ohraničenia slova.

Vysvetlenie možnosti hranice slova

Možnosť ohraničenia slova (\b) je špeciálny znak, ktorý hovorí Grepovi, aby zodpovedal iba slovám, ktoré majú začiatok aj koniec. Pomáha zabezpečiť, aby vaše výsledky vyhľadávania neobsahovali žiadne čiastočné zhody (napr. ak hľadáte „mačka“, nevráti výsledky ako „húsenica“ alebo „rozptýlený“). Znak \b sa zvyčajne používa v kombinácii s inými hľadanými výrazmi na vytvorenie presnejšieho vyhľadávania.

Ak chcete spresniť vyhľadávanie tak, aby obsahovalo iba výskyty presného slova „jablko“, pridajte znak \b pred a za slovo −

grep '\bapple\b' file.txt 

Tým sa vrátia iba riadky, v ktorých sa vyskytuje presná fráza „jablko“.

Príklady vyhľadávania presnej zhody pomocou možnosti ohraničenia slov

Tu je niekoľko príkladov, ako by ste mohli použiť možnosť ohraničenia slova v praxi: - Ak chcete nájsť všetky výskyty slov "kniha" aj "knihy", ale nie žiadne iné slová obsahujúce tieto písmená −

grep '\bbook\b' file.txt
  • Ak chcete nájsť všetky výskyty "cat" aj "cats", ale nie žiadne iné slová obsahujúce tieto písmená − grep '\bcat\b' file.txt- Ak chcete nájsť všetky výskyty presnej frázy "analýza údajov":

grep '\bdata analysis\b' file.txt

Použitie možnosti hranice slov môže výrazne zlepšiť presnosť a relevantnosť vašich vyhľadávaní Grep. Experimentujte s rôznymi kombináciami hľadaných výrazov a upravujte svoje výsledky, kým nenájdete presne to, čo hľadáte.

Vyhľadávanie pomocou regulárnych výrazov

Regulárne výrazy sú množinou znakov používaných na definovanie vzorov vyhľadávania. Umožňujú komplexnejšie a špecifickejšie vyhľadávanie ako jednoduché porovnávanie reťazcov alebo vzorov.

Regulárne výrazy poskytujú flexibilný spôsob vyhľadávania textu v súboroch a možno ich použiť na extrahovanie informácií z veľkých súborov údajov. Grep má vstavanú podporu pre regulárne výrazy, vďaka čomu je vynikajúcim nástrojom na vykonávanie zložitých vyhľadávaní.

Vysvetlenie regulárnych výrazov a ich použitia vo vyhľadávaní Grep

Regulárne výrazy pozostávajú z rôznych znakov, ktoré majú pri použití s Grep špeciálny význam. Napríklad bodka (.) zodpovedá ľubovoľnému jednotlivému znaku, zatiaľ čo hviezdička (*) zodpovedá žiadnemu alebo viacerým výskytom predchádzajúceho znaku. Znak zvislej čiary (|) sa používa na oddelenie viacerých vyhľadávacích vzorov, zatiaľ čo zátvorky ([]) sa používajú na vytvorenie znakovej sady, ktorá sa zhoduje s ktorýmkoľvek z priložených znakov.

Jednou z výkonných funkcií regulárnych výrazov je schopnosť používať skupiny a spätné referencie. Skupiny sa vytvárajú uzavretím časti výrazu do zátvoriek().

Záver

Grep je výkonný nástroj, ktorý umožňuje používateľom vyhľadávať viaceré reťazce, vzory alebo slová v rámci daného súboru. Vďaka zvládnutiu základných príkazov a syntaxe Grepu môžu používatelia jednoducho vyhľadávať jednotlivé inštancie reťazca alebo vzoru. Skutočná sila Grepu však spočíva v jeho schopnosti hľadať viacero reťazcov alebo vzorov naraz.

Použitím operátora OR (|) môžu používatelia rozšíriť svoje vyhľadávanie tak, aby zahŕňalo mnoho rôznych možností naraz. Okrem toho pomocou kontextových možností (-A, -B, -C) môžu používatelia vyhľadávať konkrétne slová v širšom kontexte.