2011-09-14 23 views
5

Sono stato su Google, e non riesco a trovare la risposta che sto cercando.Grep per più modelli su più file

Dire Ho un file, text1.txt, nella directory mydir i cui contenuti sono:

one 
two 

e un altro chiamato text2.txt, anche in mydir, i cui contenuti sono:

two 
three 
four 

sto cercando per ottenere un elenco di file (per una determinata directory) che contengono tutti i (nessuno) schemi che cerco. Nell'esempio ho fornito, sto cercando di uscita da qualche parte lungo le linee di:

./text1.txt 

o

./text1.txt:one 
./text1.txt:two 

Le uniche cose che sono stato in grado di trovare sono riguardante corrispondenza eventuali modelli in un file, o corrispondenti a più pattern in un singolo file (che ho provato ad estendere a un'intera directory, ma ho ricevuto errori di utilizzo di grep).

Qualsiasi aiuto è molto apprezzato.

Edit-Le cose che ho provato

grep "pattern1" < ./* | grep "pattern2" ./* 

"reindirizzamento ambiguo"

grep 'pattern1'|'pattern2' ./* 

restituisce i file che corrispondono a uno schema

+0

Qual è stato il messaggio di errore di utilizzo? E qual era il comando che hai provato? –

risposta

8

Un modo potrebbe essere simile a questo:

find . | xargs grep 'pattern1' -sl | xargs grep 'pattern2' -sl 
+1

o il supplente di questo tipo: 'grep -rl 'pattern1' | xargs grep 'pattern2' -l' –

+0

'grep -rlZ 'pattern1' | xargs --null grep 'pattern2' -l' per essere al sicuro sui nomi dei file. – Kal

3

I sottile k questo è quello che vi serve (è possibile aggiungere facilmente più modelli)

grep -EH 'pattern1|pattern2' mydir 
+1

che è un o, OP vuole un e –

2

Per raffinare la risposta del cervello:

find . -type f -print0 | xargs -0 grep 'pattern1' -slZ | xargs -0 grep 'pattern2' -sl 

Ciò manterrà grep di cercare di directory di ricerca, e in grado di gestire correttamente i nomi di file con spazi , se si passa il flag -Z a grep per tutti tranne l'ultimo pattern e passa da -0 a xargs.

Problemi correlati