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.