2009-05-19 10 views
13

To może być duplikat jak wierzę już widział coś takiego, ale nie można go znaleźć już więc pytam:Grep: uzyskać wszystkie pliki, które nie ma linii, który pasuje

mam wiele plików z wieloma liniami, w większości przypadków jedna z linii zawiera pewien patern. Chciałbym mieć każdy plik, który nie ma linii z tym patern.

EDYCJA: Wystarczy użyć opcji "-L" grep. Jest to duplikat, jestem pewien, ale nie znaleźliśmy oryginalne plecy ...

+0

dlaczego Otrzymuję -1 dla tego?! – claf

+0

Zgaduję, że ktoś pomyślał, że informacje były łatwo dostępne w instrukcji. – JesperE

+0

Jeśli znalazłeś odpowiedź, nie edytuj swojego pytania, * zamiast * odpowiedz * odpowiedź. W dzisiejszych czasach możesz nawet akceptować własne odpowiedzi. – JesperE

Odpowiedz

24

odpowiedź była tylko po to żeby wybrać opcję "-L" w celu uzyskania pliku bez wzór ... Powinienem uważniej czytać mężczyznę!

6

Grep zwraca 0/1, aby wskazać, czy nie było meczu, więc można zrobić coś takiego:

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

EDIT: można także użyć opcji -L:

grep -l "jakiś wyraz" *

+0

nie trzeba pętli po prostu trzeba użyć opcji "-L" grep. – claf

0

spróbować "Count" i filtra, gdzie jest równa "0":

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

(jeśli używasz TurboGREP kaszel, nie będzie miał przełącznik -l;))

+0

TurboGREP wydaje się mieć -l i -v, więc możesz po prostu użyć 'grep -lv 'expr' *'. – amertune

+0

jeśli turbogrep działa jak gnu grep, -lv nie robi tego, co chcesz. pokazuje wszystkie pliki z dowolną linią, która nie pasuje do wyrażenia. –

Powiązane problemy