GNU/Linux >> Znalost Linux >  >> Linux

Vypsat názvy souborů na základě vzoru názvu souboru a obsahu souboru?

grep LMN20113456 LMN2011*

nebo pokud chcete prohledávat rekurzivně v podadresářích:

find . -type f -name 'LMN2011*' -exec grep LMN20113456 {} \;

Lze to provést bez find také pomocí grepu "--include" možnost.

Manová stránka grep říká:

--include=GLOB
Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).

Chcete-li tedy provést rekurzivní vyhledávání řetězce v souboru odpovídajícímu konkrétnímu vzoru, bude to vypadat nějak takto:

grep -r --include=<pattern> <string> <directory>

Chcete-li například rekurzivně hledat řetězec "mytarget" ve všech souborech Makefiles:

grep -r --include="Makefile" "mytarget" ./

Nebo chcete-li hledat ve všech souborech začínajících "Make" v názvu souboru:

grep -r --include="Make*" "mytarget" ./

Grep NEPOUŽÍVÁ „zástupné znaky“ pro vyhledávání – to je shell globbing, jako *.jpg. Grep používá „regulární výrazy“ pro vyhledávání vzorů. Zatímco v shellu '*' znamená "cokoli", v grep to znamená "odpovídající předchozí položce nula nebo vícekrát".

Více informací a příklady zde:http://www.regular-expressions.info/reference.html

Odpověď na vaši otázku - můžete najít soubory odpovídající nějakému vzoru s grep:

find /somedir -type f -print | grep 'LMN2011' # that will show files whose names contain LMN2011

Poté můžete prohledávat jejich obsah (nerozlišují se malá a velká písmena):

find /somedir -type f -print | grep -i 'LMN2011' | xargs grep -i 'LMN20113456'

Pokud cesty mohou obsahovat mezery, měli byste použít funkci "nulový konec":

find /somedir -type f -print0 | grep -iz 'LMN2011' | xargs -0 grep -i 'LMN20113456'

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

  2. grep velký seznam proti velkému souboru

  3. Výhody katovacího pilníku a potrubí do grep

  1. Co přesně je <() v bash (a =() v zsh)?

  2. syntaxe ls --hide=a ls --ignore=

  3. grep dvojice vzorů a souboru

  1. Jak zkopírovat oprávnění a vlastnictví souboru do jiného souboru v Linuxu

  2. Tisknout čáry mezi (a včetně) dvěma vzory?

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