Come posso trovare una parola in file specifici che corrispondono a un modello. per esempio. cercando version
in CMake*
file trovati ricorsivamente nella directory corrente.
Risposta accettata:
Se vuoi vedere il nome del file e il numero di riga, POSIXly:
find . -name 'CMake*' -type f -exec grep -nF /dev/null version {} +
(non vuoi usare ;
qui che eseguirebbe un grep
per file). Questo è l'equivalente standard dello GNUismo:
find . -name 'CMake*' -type f -print0 | xargs -r0 grep -nHF {} +
find
(nella prima), xargs
(nel secondo) passerà tanti argomenti a grep
possibile senza superare il limite del numero di argomenti che puoi passare a un comando. Quando si esegue la divisione, potrebbe accadere che per l'ultima esecuzione venga passato un solo argomento a grep
nel qual caso grep
non stamperebbe il nome del file. Ecco perché hai bisogno di /dev/null
lì (o -H
con GNU grep
).
Con -type f
, stiamo considerando solo file normali (non dispositivi, collegamenti simbolici, pipe, directory...).
Se vuoi usare GNUisms, puoi usare GNU grep
possibilità di discendere un albero di directory:
grep -rHnF --include='CMake*' version .
Non vuoi usare -R
poiché ciò causa grep
per seguire i collegamenti simbolici quando si scende dall'albero delle directory e si legge da dispositivi, fifo, socket...
Quella versione è più sicura ed efficiente, ma non portatile.