Elenca i file che contengono una determinata parola nel loro testo


30

Vorrei elencare i file in modo ricorsivo e univoco che contengono la parola data.

Esempio : controllando la parola "check", normalmente faccio grep

$ grep check * -R

Ma poiché ci sono molte occorrenze di questa parola, ottengo un sacco di risultati. Quindi ho solo bisogno di elencare i nomi dei file che contengono la parola di ricerca fornita. Immagino qualche trucco con finde xargssarebbe sufficiente qui, ma non sono sicuro.

Qualche idea?

Risposte:


39

Utilizzare l' opzione -lo --files-with-matchesche è documentata come segue:

Sopprime l'output normale; stampa invece il nome di ciascun file di input dal quale normalmente sarebbe stato stampato l'output. La scansione si interromperà al primo incontro. ( -lè specificato da POSIX.)

Quindi, per esempio, puoi usare quanto segue:

$ grep check * -lR

Funziona anche su MSYS. Grande!
Kos,

2
Ho usato grep -rl "text to find" "/usr/share"e ha funzionato benissimo!
Shrout1

18
find . -type f -exec grep -l check {} +

Probabilmente non vorrai usare l' -Ropzione che con le versioni moderne di GNU grepsegue i collegamenti simbolici quando discendi le directory. Utilizzare -rinvece l' opzione lì che dalla versione 2.12 (aprile 2012) non segue più i collegamenti simbolici.

Se il tuo grep non è quello GNU, o è precedente alla versione 2.12, o se hai bisogno che il tuo codice sia portabile su sistemi GNU non bleeding, usa il findcomando sopra.

Altrimenti, puoi fare:

grep -rl check .

Non utilizzare *(poiché ciò ometterebbe i file nascosti nella directory corrente (e solo nella directory corrente) e causerebbe problemi ai file il cui nome inizia con a -), evita di passare opzioni dopo argomenti poiché non è garantito che funzioni a seconda del ambiente e non è portatile.


1

Prova questo:

find . -type f | xargs grep -c check $1 | grep -v ":0"

Per quanto riguarda le grepbandiere ...

-c restituirà un nome file seguito da: e un numero che indica quante volte la stringa di ricerca appare nel file specificato.

-vprenderà l'output dalla prima grepricerca, filtrerà i file con risultati zero e stamperà solo i file con risultati diversi da zero.


Questo otterrà un falso negativo se hai file (o registri) i cui nomi contengono :0. È meglio da fare grep -v ':0$'. Anche questo si strozzerà con nomi di percorso che contengono newline (s).
Scott,

0

grep -rin "whatToFind" locationToFInd

ad esempio $ grep -rin "vihaan".

ricercherà ed elencherà ricorsivamente i nomi dei file e le righe corrispondenti che contengono "vihaan", "." si riferisce alla directory corrente.


0
find . -type f | grep "keyword" *

cerca nella directory corrente. Per cercare da root, specificare /invece di.


0

grep -lR "text-to-find" <where-to-find> funziona anche bene.

ad esempio, grep -lR "NAVIGATE" .dove troviamo la parola NAVIGATEnella .directory corrente.


-2
 grep -rli trim \` find . -name *.q \` 

Ti dà la lista di .q file contiene la parola chiavetrim

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.