2009-05-19 12 views
13

Questo può essere un duplicato come credo già visto qualcosa di simile, ma non riesco a trovarlo più così sto chiedendo:Grep: ottenere tutti i file che non dispone di una linea che corrisponde

ho un sacco di file con più righe, e nella maggior parte dei casi, una delle righe contiene un certo patern. Mi piacerebbe avere ogni file che non ha una linea con questo patern.

MODIFICA: è sufficiente utilizzare l'opzione "-L" grep. Si tratta di un duplicato, sono sicuro, ma non trovo il posteriore originale ...

+0

Perché ha Prendo -1 per questo ?! – claf

+0

La mia ipotesi è che qualcuno abbia pensato che le informazioni fossero prontamente disponibili nel manuale. – JesperE

+0

Se hai trovato una risposta, non modificare la tua domanda con essa, * invia * la risposta. Al giorno d'oggi puoi persino accettare le tue risposte. – JesperE

risposta

24

la risposta è stata solo per ottenere l'opzione "-L" al fine di avere file senza la modello ... Avrebbe dovuto leggere l'uomo con più attenzione!

6

grep restituisce 0/1 per indicare se ci fosse una corrispondenza, in modo da poter fare qualcosa di simile:

for f in *.txt; do 
    if ! grep -q "some expression" $f; then 
     echo $f 
    fi 
done 

EDIT: È anche possibile utilizzare l'opzione -L:

grep -L "qualche espressione" *

+0

non c'è bisogno di loop, basta usare l'opzione "-L" di grep. – claf

0

provare "contare" e filtro dove è uguale ": 0":

grep -c [pattern] * | grep ":0" 

(se si utilizza TurboGREP tosse, non avrete uno switch -L;))

+0

Sembra che TurboGREP abbia -l e -v, quindi potresti semplicemente usare 'grep -lv 'expr' *'. – amertune

+0

se turbogrep funziona come gnu grep, -lv non fa quello che vuoi. mostra tutti i file con qualsiasi linea che non corrisponde all'espressione. –

Problemi correlati