Ho bisogno di grep alcuni file per vedere quali contengono una determinata parola:
grep -l word *
Successivamente ho bisogno di grep quellelenco di file per vedere quali contengono una parola diversa. Il modo più semplice sarebbe probabilmente scrivere uno script ma non so come farlo funzionare.
Commenti
Risposta
Supponendo che nessuno dei nomi di file contenga spazi bianchi, virgolette singole, virgolette doppie o barre rovesciate (o iniziare con – con GNU grep
), puoi fare:
grep -l word * | xargs grep word2
Xargs eseguirà il secondo grep su ogni file dal primo grep.
Con GNU grep
/ xargs
o compatibile, puoi renderlo più affidabile con:
grep -lZ word ./* | xargs -r0 grep word2
Lutilizzo di -Z
rende grep
stampa i nomi dei file delimitati da NUL in modo che possano essere utilizzati con xargs -0
. Lopzione -r
per xargs
evita che il secondo grep
venga eseguito se il primo grep
non trova nulla.
Risposta
grep -l word1 $(grep -l word2 *)
o forse per una delle due parole sulla stessa riga:
grep -w "word1\|word2" *
vedi qui
Risposta
Se devi trovare file contenenti una parola e poi filtrare quei file che contengono unaltra parola, potresti utilizzare una sequenza di comandi come questa:
grep word * | awk -F ":" "{print $1}"|uniq | xargs grep word2
-
grep word *
: mostrerà tutti i file contenenti “word”, il nome del file sarà il primo nellelenco. -
awk -F ":" "{print $1}"
– stamperà solo il nome del file dei risultati -
uniq
– farà in modo di non stampare il nome del file più di una volta. -
xargs grep word2
– cercherà di nuovo nellelenco dei file che hai ottenuto.
Commenti
- @don_crissti Ma la combinazione di pezzi
grep -l word1 * | xargs -d'\n' grep -l word2
funziona per qualsiasi cosa tranne il newline, il che è abbastanza strano che quasi nessuno lo usa.
grep
? GNUgrep
? Sei su Linux, Solaris, i BSD?