Vykonajte rekurzívne vyhľadávanie Grep vo všetkých súboroch a adresároch
Všestranný príkaz grep vám umožňuje vyhľadávať text vo všetkých súboroch a všetkých podadresároch adresára. Tu je návod, ako to urobiť.
Grep je vynikajúci nástroj, keď musíte hľadať v obsahu súboru.
Zvyčajne spustíte grep na jednom súbore, ako je tento:
grep search_term filename
Grep je dosť všestranný. Ak chcete vyhľadať všetky súbory v adresári pomocou grep, použite ho takto:
grep search_term *
Je s tým problém. Vyhľadáva iba vo všetkých súboroch v aktuálnom adresári. Nebude hľadať v podadresároch.
Pomocou možnosti -r
rekurzívneho vyhľadávania môžete vykonať grep vyhľadávanie vo všetkých súboroch a všetkých podadresároch aktuálneho adresára:
grep -r search_term .
Môžete tiež zadať cestu k adresáru, ak sa nenachádzate v adresári, v ktorom chcete vykonať vyhľadávanie:
grep -r search_term directory_path
To bola rýchla rekapitulácia. Dovoľte mi, aby som vám to všetko podrobne ukázal na správnych príkladoch, aby ste to ľahšie pochopili.
Grep vyhľadáva vo všetkých súboroch adresára
Tu je adresárová štruktúra, ktorú použijem v tomto príklade. Všetky súbory okrem empty.txt obsahujú výraz 'simple', na ktorom vykonám vyhľadávanie grep.
abhishek@LHB:~/scripts$ tree
.
├── dir1
│ └── new_script.sh
├── dir2
│ └── your_script.sh
├── dir3
│ ├── empty.txt
│ └── linked.txt -> ../../sample.txt
├── my_script.sh
└── your_script.sh
3 directories, 6 files
Ak chcete vyhľadať slovo „jednoduchý“ vo všetkých súboroch aktuálnych adresárov, stačí použiť zástupný znak (*). Zástupný znak v skutočnosti nahrádza názov všetkých súborov a adresárov v aktuálnom adresári.
grep simple *
Toto vyhľadá všetky súbory v aktuálnych adresároch, ale nevstúpi do podadresárov. Keďže nemôžete priamo vyhľadávať grep v adresári, spolu s výsledkami vyhľadávania sa zobrazí chyba „XYZ je adresár“.
Ak sa nenachádzate v rovnakom adresári, v ktorom chcete vykonať akciu, môžete zadať cestu k adresáru a ukončiť ju znakom /*
grep search_term directory_path/*
Zástupný znak v podstate používate na rozšírenie všetkých prvkov (súborov a adresárov) daného adresára.
Teraz, keď to viete, sa pozrime, ako môžete vykonať rekurzívne vyhľadávanie pomocou grep, aby sa pozrel aj do súborov v podadresároch.
Grep rekurzívne vyhľadávanie vo všetkých podadresároch adresára
Grep poskytuje možnosť -r
pre rekurzívne vyhľadávanie. Pri tejto možnosti sa grep pozrie do všetkých súborov v aktuálnom (alebo špecifikovanom) adresári a tiež sa pozrie do všetkých súborov všetkých podadresárov.
Tu je rekurzívne vyhľadávanie, ktoré som vykonal v predchádzajúcom príklade, aby som vykonal vyhľadávanie grep v aktuálnom priečinku:
grep -r simple .
Tu je výsledok:
Existuje aj možnosť -R
pre rekurzívne vyhľadávanie a funguje takmer rovnako ako možnosť -r
.
grep -R simple .
Aký je teda rozdiel grep -r
a grep -R
? Vlastne len jeden. -R
je dereferencované vyhľadávanie, čo znamená, že bude nasledovať symbolické odkazy na prechod na pôvodný súbor (ktorý sa môže nachádzať v inej časti systému).
Pozrite sa na výstup vyhľadávania -R
v rovnakom príklade:
Všimli ste si, že poskytuje ďalší výsledok vyhľadávania s linked.txt
, čo je v podstate symbolický odkaz a bol vynechaný z vyhľadávania grep s voľbou -r
?
Ak sa nenachádzate v adresári, kde chcete vykonať rekurzívne vyhľadávanie, zadajte absolútnu alebo relatívnu cestu adresára príkazu grep:
grep -r search_term path_to_directory
Bonusový tip: Vylúčte určitý adresár z rekurzívneho vyhľadávania grep
Všetko sa zdá byť v poriadku, ale čo ak chcete vylúčiť určitý adresár z rekurzívneho vyhľadávania? Aj na to existuje ustanovenie. Povedal som vám, že grep je mimoriadne všestranný príkaz.
grep -r --exclude-dir=dir_name serach_term directory_path
To nie je ono. Z rekurzívneho vyhľadávania môžete vylúčiť viac ako jeden podadresár nasledujúcim spôsobom:
grep -r --exclude-dir={dir1,dir2} serach_term directory_path
Takto vyzerá vylúčenie adresárov v našom príklade tu:
A áno, ako ukazuje príklad vyššie, vylúčenie funguje s rekurzívnymi možnosťami -r
aj -R
.
Zhrnúť
Tu je rýchly súhrn používania grep vyhľadávania pre viacero súborov a adresárov:
- grep string *
Vyhľadáva vo všetkých súboroch v aktuálnom adresári
- grep string dir
Vyhľadáva vo všetkých súboroch v adresári dir
- grep -r string .
Rekurzívne vyhľadávanie vo všetkých súboroch vo všetkých podadresároch
- grep -r string dir
Rekurzívne vyhľadávanie vo všetkých súboroch vo všetkých podadresároch dir
- grep -R string .
Rovnaké ako r, ale nasleduje symbolické odkazy
Dúfam, že sa vám tento rýchly grep tip páči. Ak chcete viac, môžete si prečítať tento podrobný návod na používanie príkazu grep:
Ak máte nejaké otázky alebo návrhy k tejto téme, dajte mi vedieť.