Grep in file con un'estensione specifica in una directory


11

Esiste un comando che consente di cercare una parola chiave nei file in una directory con estensione specifica?

La stringa grep -irn "string" ./pathfornisce una ricerca ricorsiva per tutti i file nella directory ./path. Il mio requisito specifico è di cercare in tutti i file ./pathcon un'estensione come*.h

Risposte:



10

S et (accendere) il sh ell opt ioni globstarcon il comando

    shopt -s globstar

Ciò comporterà **come componente del nome file tutto qui e sotto. Quindi path/**significa tutto nella pathdirectory e nelle sue sottodirectory . (Non è necessario digitare ./qui.) Quindi è possibile utilizzare

grep -in "string" path/**/*.h

per cercare tutti i .hfile dentro e sotto path.


È possibile u NSET opzioni con shopt -u.



3

Se riesci a installare qualcosa sul tuo computer, ti suggerisco di usare ack .

Puoi fare esattamente quello che ti serve con esso e molto altro. Per il tuo caso d'uso, puoi fare:

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • --hh filtra su file h
  • -i ignora il caso

Per trovare quali filtri di file sono supportati in modo nativo, eseguire il comando ack --help=type.


C'è anche ag , ex clone di ACK. Precedentemente, poiché i loro set di funzionalità da allora sono leggermente divergenti.
8

Non conoscevo un ag. Grazie per la condivisione.
d.C.

3

Che dire di questa?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

Spiegazione:

  • -L: segui i symlink
  • -name: usando l'asterisco, puoi descrivere le estensioni
  • -in: uguale alla proposta, ma la "r" è sostituita dal findcomando
  • {}: questo rappresenta il risultato del findcomando
  • \; : in caso di combinazione findcon -exec, questo è l'identificatore di fine comando

1
Come "*.h"funziona? Avrei pensato che doveva essere'*.h'
Joe,

Lavoro sempre con virgolette doppie, non penso che faccia la differenza.
Dominique,

0

Se stai usando gnu grep, ha una bandiera che fa esattamente quello che vuoi:

grep -irn --include=\*.h "string" path

anche se non credo sia disponibile in altre greps.

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.