GNU/Linux >> Znalost Linux >  >> Linux

Jak vyhledávat v konkrétních souborech odpovídajících vzoru?

Jak mohu najít slovo v konkrétních souborech odpovídající vzoru. např. vyhledávání version v CMake* soubory rekurzivně nalezené v aktuálním adresáři.

Přijatá odpověď:

Pokud chcete vidět název souboru a číslo řádku, POSIXly:

find . -name 'CMake*' -type f -exec grep -nF /dev/null version {} +

(nechcete použít ; zde, který by spustil jeden grep na soubor). To je standardní ekvivalent GNUismu:

find . -name 'CMake*' -type f -print0 | xargs -r0 grep -nHF {} +

find (v první), xargs (ve druhém) předá tolik argumentů grep pokud možno bez překročení limitu počtu argumentů, které můžete příkazu předat. Při provádění tohoto rozdělení se může stát, že při posledním běhu bude do grep předán pouze jeden argument v takovém případě grep nevytiskne název souboru. Proto potřebujete /dev/null tam (nebo -H s GNU grep ).

S -type f , uvažujeme pouze běžné soubory (nikoli zařízení, symbolické odkazy, kanály, adresáře…).

Pokud chcete používat GNUismy, můžete použít GNU grep schopnost sestupovat z adresářového stromu:

 grep -rHnF --include='CMake*' version .

Nechcete používat -R protože to způsobuje grep sledovat symbolické odkazy při sestupu ze stromu adresářů a čtení ze zařízení, fifos, socketů…

Tato verze je bezpečnější a efektivnější, ale není přenosná.


Linux
  1. Jak najít více řetězců v souborech?

  2. Jak najít konkrétní text pomocí GREP v systému Linux

  3. Jak mohu vyhledat víceřádkový vzor v souboru?

  1. Jak najít soubory na Ubuntu?

  2. Jak hledat soubory podle velikosti a přípony?

  3. Jak v Linuxu najdu všechny soubory obsahující konkrétní text?

  1. Jak používat příkaz Grep k vyhledání textu v souborech

  2. Jak prohledávat obsah více souborů pdf?

  3. Příkaz Linux:Jak „najít“ pouze textové soubory?