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

Esempio : controllo della parola “check”, normalmente faccio è un grep

$ grep check * -R 

Ma poiché ci sono molte occorrenze di questa parola, ottengo molto output. Quindi devo solo elencare i nomi dei file che contengono la parola di ricerca data. Immagino che qualche trucco con find e xargs sarebbe sufficiente qui, ma non sono sicuro.

Qualche idea?

Risposta

Utilizza -l o --files-with-matches che è documentata come segue:

Sopprimi loutput normale; stampa invece il nome di ogni file di input da cui normalmente sarebbe stato stampato loutput. La scansione si interromperà alla prima partita. (-l è specificato da POSIX.)

Quindi, per esempio, puoi usare quanto segue:

$ grep check * -lR 

Commenti

  • Funziona anche su MSYS. Ottimo!
  • Ho usato grep -rl "text to find" "/usr/share" e ha funzionato benissimo!

Risposta

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

Probabilmente “non vuoi usare lopzione -R che con le versioni moderne di GNU grep segue i collegamenti simbolici quando discendono le directory. Utilizza lopzione -r 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-edge, usa il find 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 per i file il cui nome inizia con -), evita di passare opzioni dopo gli argomenti in quanto non sono garantite teed per funzionare a seconda dellambiente e non è portabile.

Answer

Prova questo:

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

Per quanto riguarda i grep flag …

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

-v prenderà loutput dal primo grep cerca, filtra i file con zero risultati e stampa solo i file con risultati diversi da zero.

Commenti

  • Otterrai un falso negativo se hai file (o direttori) i cui nomi contengono :0. ' è meglio fare grep -v ':0$'. Anche questo soffocerà sui nomi di percorso che contengono una nuova riga.

Risposta

funziona bene.

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

Answer

grep -rin “whatToFind” locationToFInd

es $ grep -rin “vihaan”.

cercherà ed elencherà ricorsivamente i nomi dei file e le righe corrispondenti che contengono “vihaan”, “.” fa riferimento alla directory corrente.

Risposta

find . -type f | grep "keyword" * 

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

Risposta

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

Fornisci lelenco dei file .q contiene la parola chiave trim

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *