2016-06-13 8 views
1

Ich habe viele Protokolldateien in einem Verzeichnis. In diesen Dateien gibt es viele Zeilen. Einige dieser Zeilen enthalten ERROR Wort.4 Zeilen invertieren grep Suche in einem Verzeichnis, das viele Dateien enthält

Ich benutze grep ERROR abc.*, um Fehlerzeilen von allen abc1, abc2, abc3 usw. zu bekommen.

Jetzt sind es 4-5 Zeilen, die ich vermeiden möchte.

Also, ich bin mit

grep ERROR abc* | grep -v 'str1\| str2' 

Dies funktioniert gut. Aber wenn ich 1 weitere Zeichenfolge einfüge,

wird es nicht betroffen.

Ich muss 4-5 Saiten vermeiden .. kann jemand eine Lösung vorschlagen?

+1

Was ist der Wert dieser Zeichenfolge? Es wird erwartet, dass Sie Beispieleingabe/-ausgabe und/oder ein minimales, funktionierendes, wiederholbares Codebeispiel angeben. – Elyasin

+0

Seien Sie vorsichtig - Sie sprechen über Strings "(' einfügen 1 mehr String' und 'str1' usw.), aber Sie verwenden grep mit Regexps, nicht Strings.Lernen Sie den Unterschied und verwenden Sie das richtige Werkzeug mit den richtigen Optionen für was auch immer Willst du die richtige Terminologie verwenden und die richtige Terminologie verwenden, wenn du deine Aufgabe erfüllst, wenn du deine Frage so bearbeitest, dass sie eine präzise, ​​testbare Eingabe/Ausgabe enthält, dann sei genau, wenn du nach Strings oder Regexps suchen willst wir können dir am besten helfen –

+0

Brauchst du diesen Platz wirklich nach '|'? –

Antwort

2

Sie mehrere Suchmuster verwendet, das heißt in einer Weise, einen regulären Ausdruck. -E in grep unterstützt einen erweiterten regulären Ausdruck, wie Sie von der man Seite unter

-e PATTERN, --regexp=PATTERN 
      Use PATTERN as the pattern. This can be used to specify multiple search patterns, or to protect a pattern beginning with a hyphen (-). (-e is specified by POSIX.) 

    -E, --extended-regexp 
     Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.) 

sehen

grep ERROR abc* | grep -Ev 'str1|str2|str3|str4|str5' 

Ein Beispiel für die Verwendung zusammen mit der Suche -v invertieren, so müssen Sie die -E Flag verwenden zu Ihrer Referenz: -

$ cat sample.txt 
ID F1 F2 F3 F4  ID F1 F2 F3 F4 
aa aa 
bb 1 2 3 4 bb 1 2 3 4 
cc 1 2 3 4 cc 1 2 3 4 
dd 1 2 3 4 dd 1 2 3 4 
xx xx 

$ grep -vE "aa|xx|yy|F2|cc|dd" sample.txt 
bb 1 2 3 4 bb 1 2 3 4 
1

sollte Ihr Beispiel funktioniert, aber Sie können auch verwenden

grep ERROR abc* | grep -e 'str1' -e 'str2' -e 'str3' -v 
Verwandte Themen