sviluppo-web-qa.it

Ricerca di testo ricorsiva con pattern grep e file

Dato questo esempio di struttura delle cartelle:

/folder1/file1.txt
/folder1/file2.djd
/folder2/file3.txt
/folder2/file2.fha

Come faccio una ricerca di testo ricorsiva su tutti *.txt file con grep da "/"?

("grep -r <pattern> *.txt" non riesce quando eseguito da "/", poiché non ci sono .txt file in quella cartella.)

46
Anders Sandvig

La mia versione di GNU Grep ha un interruttore per questo:

grep -R --include='*.txt' $Pattern

Descritto come segue:

--include=GLOB

Cerca solo i file il cui nome di base corrisponde a GLOB (usando la corrispondenza con caratteri jolly come descritto in --exclude).

62
Kyle Brandt

Se si dispone di un numero elevato di file, sarebbe utile incorporare xargs nel comando per evitare un errore "Elenco argomenti troppo lungo".

find . -name '*.txt' -print | xargs grep <pattern>
20
Mark

potresti essere in grado di utilizzare i tuoi zsh 's EXTENDED_GLOB opzione ( docs )

grep <pattern> **/*.txt
2
santa

Si consiglia di dare un'occhiata a http://betterthangrep.com , che dispone di funzionalità per la selezione dei file da cercare per tipo di file.

1
Andy Lester
find . -name '*.txt' -type f -exec grep <pattern> {} \;
0
innaM

La risposta di Mannis avrebbe rovesciato un nuovo processo grep per ogni file di testo. Se hai lotti di file di testo lì, potresti considerare di eseguire prima il grepping di ogni file e scegliere i file .txt al termine:

grep -r <pattern> * | grep \.txt:

È più intensivo per il disco, ma potrebbe essere comunque più veloce.

0
Commander Keen

È il 2019 e non potrei mai usare grep per la ricerca di testo ricorsiva.

Le risposte di oggi a IMHO dovrebbero includere ripgrep :

rg <pattern> -ttxt
0
santa