Usare grep per cercare i file forniti da find: cosa c'è di sbagliato in find. | xargs grep '& # 8230;'?
Domanda
Quando uso il comando:
find . | xargs grep '...'
Ottengo le partite sbagliate. Sto cercando di cercare la stringa ...
in tutti i file nella cartella corrente.
Soluzione
Come ha detto Andy White, devi usare fgrep
per abbinare .
o sfuggire ai punti.
Quindi devi scrivere ( -type f
è avere solo i file: ovviamente non vuoi le directory.):
find . -type f | xargs fgrep '...'
o se vuoi ancora usare grep:
find . -type f | xargs grep '\.\.\.'
E se vuoi solo la directory corrente e non i suoi sottodirectory:
find . -maxdepth 1 -type f | xargs fgrep '...'
Altri suggerimenti
'' corrisponde a qualsiasi carattere, quindi troverai tutte le righe che contengono 3 o più caratteri.
Puoi sfuggire ai punti, in questo modo:
find . | xargs grep '\.\.\.'
Oppure puoi usare fgrep, che fa una corrispondenza letterale anziché una corrispondenza regex:
find . | xargs fgrep '...'
(Alcune versioni di grep accettano anche un flag -F che le fa comportare come fgrep.)
@OP, se stai cercando file che contengono ...,
grep -R "\.\.\." *
Se stai letteralmente digitando grep '...'
abbinerai praticamente qualsiasi stringa. Dubito che stai effettivamente digitando '...'
per il tuo comando grep, ma se lo sei, ...
corrisponderà a tre caratteri qualsiasi.
Pubblica maggiori informazioni su ciò che stai cercando e forse qualcuno può aiutarti di più.
Se stai cercando un nome file corrispondente, prova:
find . -name "filename pattern"
o
find . | grep "filename pattern"
Se stai cercando i file che corrispondono (ovvero contengono la stringa grep)
find . | xargs grep "string pattern"
funziona bene. o semplicemente:
grep "string pattern" -R *
Per completare la risposta di Jeremy, potresti anche provare
find . -type f | xargs grep 'your_pattern'
o
find . -type f -exec grep 'your_pattern' {} +
Che è simile a un xargs
Potrei aggiungere: RTFM! O in un modo più educato: usa & amp; abuso di
man command