2009-05-19 5 views
13

Cela peut être un doublon comme je crois déjà vu quelque chose comme ça, mais ne le trouve pas plus, alors je demande:Grep: obtenir tous les fichiers qui ne dispose pas d'une ligne qui correspond

Je beaucoup de fichiers avec plusieurs lignes, et dans la plupart des cas, l'un de la ligne contient un certain patern. Je voudrais avoir tous les fichiers qui n'ont pas de ligne avec ce patern.

EDIT: Il suffit d'utiliser l'option "-L" grep. Ceci est un double, je suis sûr, mais ne trouve pas le dos ...

+0

Pourquoi est-ce Je reçois -1 pour celui-ci?! – claf

+0

Ma conjecture est que quelqu'un a pensé que l'information était facilement disponible dans le manuel. – JesperE

+0

Si vous avez trouvé une réponse, ne la modifiez pas, * postez la réponse à la place. De nos jours, vous pouvez même accepter vos propres réponses. – JesperE

Répondre

24

la réponse était juste pour obtenir l'option "-L" afin d'avoir le fichier sans modèle ... Aurait dû lire l'homme plus attentivement!

6

Grep retourne originale 0/1 pour indiquer s'il y avait un match, de sorte que vous pouvez faire quelque chose comme ceci:

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

EDIT: Vous pouvez également utiliser l'option -L:

grep -L "une certaine expression" *

+0

pas besoin de boucle suffit d'utiliser "-L" option de grep. – claf

0

essayer "count" et le filtre où les égaux ": 0":

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

(si vous utilisez TurboGREP toux, vous n'aurez pas un interrupteur -L;))

+0

TurboGREP semble avoir -l et -v, donc vous pouvez juste utiliser 'grep -lv 'expr' *'. – amertune

+0

si turbogrep fonctionne comme grep gnu, -lv ne fait pas ce que vous voulez. il vous montre tous les fichiers avec n'importe quelle ligne qui ne correspond pas à l'expression. –

Questions connexes