Grep je vynikající nástroj, když musíte hledat v obsahu souboru.
Obvykle spustíte grep na jediném souboru takto:
grep search_term filename Grep je docela všestranný. Pokud chcete prohledat všechny soubory v adresáři pomocí grep , použijte jej takto:
grep search_term * Je s tím problém. Prohledává pouze všechny soubory v aktuálním adresáři. Nebude hledat v podadresářích.
Můžete provést grep vyhledávání ve všech souborech a všech podadresářích aktuálního adresáře pomocí -r možnost rekurzivního vyhledávání:
grep -r search_term . Můžete také zadat cestu k adresáři, pokud se nenacházíte v adresáři, kde chcete provést vyhledávání:
grep -r search_term directory_path To byla rychlá rekapitulace. Dovolte mi, abych vám to vše podrobně ukázal na správných příkladech, aby to bylo pro vás snazší.
Grep prohledává všechny soubory v adresáři
Zde je adresářová struktura, kterou použiji v tomto příkladu. Všechny soubory kromě empty.txt obsahují výraz 'simple', na kterém provedu vyhledávání grep.
[email protected]:~/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
Chcete-li vyhledat slovo 'simple' ve všech souborech aktuálních adresářů, stačí použít zástupný znak (*). Zástupný znak ve skutečnosti nahrazuje názvy všech souborů a adresářů v aktuálním adresáři.
grep simple * To prohledá všechny soubory v aktuálních adresářích, ale nevstoupí do podadresářů. Protože nemůžete přímo vyhledávat grep v adresáři, zobrazí se spolu s výsledky hledání chyba „XYZ je adresář“.
Pokud nejste ve stejném adresáři, kde chcete hrát, můžete zadat cestu k adresáři a ukončit ji /*
grep search_term directory_path/* Zástupný znak v podstatě používáte k rozbalení všech prvků (souborů a adresářů) daného adresáře.
Nyní, když to víte, se podívejme, jak můžete provést rekurzivní vyhledávání pomocí grep, aby se také podíval do souborů v podadresářích.
Rekurzivní vyhledávání Grep ve všech podadresářích adresáře
Grep poskytuje -r možnost rekurzivního vyhledávání. S touto volbou se grep podívá do všech souborů v aktuálním (nebo specifikovaném) adresáři a také se podívá do všech souborů všech podadresářů.
Zde je rekurzivní vyhledávání, které jsem provedl v předchozím příkladu pro vyhledávání grep v aktuální složce:
grep -r simple . Zde je výsledek:
Existuje také -R volba pro rekurzivní vyhledávání a funguje téměř stejně jako -r možnost.
grep -R simple .
Jaký je tedy rozdíl grep -r a grep -R ? Vlastně jen jeden. -R je dereferencované vyhledávání, což znamená, že bude následovat symbolické odkazy, aby se dostal k původnímu souboru (který může být umístěn v nějaké jiné části systému).
Podívejte se na výstup -R hledejte ve stejném příkladu:
Všimli jste si, že poskytuje další výsledek hledání s linked.txt což je v podstatě symbolický odkaz a byl vynechán z vyhledávání grep pomocí -r možnost?
Pokud se nenacházíte v adresáři, kde chcete provést rekurzivní vyhledávání, zadejte absolutní nebo relativní cestu k adresáři příkazu grep:
grep -r search_term path_to_directory Bonusový tip:Vyloučení určitého adresáře z rekurzivního vyhledávání grep
Všechno vypadá dobře, ale co když chcete vyloučit určitý adresář z rekurzivního vyhledávání? I na to existuje ustanovení. Řekl jsem vám, že grep je extrémně všestranný příkaz.
grep -r --exclude-dir=dir_name serach_term directory_path To není ono. Z rekurzivního vyhledávání můžete vyloučit více než jeden podadresář následujícím způsobem:
grep -r --exclude-dir={dir1,dir2} serach_term directory_path Takto vypadá vyloučení adresářů v našem příkladu zde:
A ano, jak ukazuje příklad výše, vyloučení funguje s oběma -r a -R rekurzivní možnosti.
Shrnutí
Zde je rychlé shrnutí použití vyhledávání grep pro více souborů a adresářů:
| Příkaz Grep | Popis |
|---|---|
| řetězec grep * | Hledá ve všech souborech v aktuálním adresáři |
| grep string dir | Hledá ve všech souborech v adresáři dir |
| grep -r řetězec . | Rekurzivní vyhledávání ve všech souborech ve všech podadresářích |
| grep -r string dir | Rekurzivní vyhledávání ve všech souborech ve všech podadresářích dir |
| řetězec grep -R . | Stejné jako r, ale následuje symbolické odkazy |
Doufám, že se vám tento rychlý grep tip líbí. Pokud chcete více, můžete si přečíst tento podrobný návod na použití příkazu grep:
Pokud máte nějaké dotazy nebo návrhy k tomuto tématu, dejte mi vědět.