Usare grep per cercare i file forniti da find: cosa c'è di sbagliato in find. | xargs grep '& # 8230;'?

StackOverflow https://stackoverflow.com/questions/1204781

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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top