2016-06-13 6 views
1

ディレクトリに多数のログファイルがあります。これらのファイルには、多くの行があります。これらの行の一部には、ERRORという語が含まれています。多くのファイルを含むディレクトリに4行invert grepを検索

私はgrep ERROR abc.*を使用して、すべてのabc1、abc2、abc3などのファイルからエラー行を取得しています。

今、私が避けたいと思っている4-5 ERROR行があります。

だから、私はこれが正常に動作します

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

を使用しています。しかし、もう1つの文字列を挿入すると、

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

影響を受けません。

私は4-5文字列を避ける必要があります。誰も解決策を提案できますか?

+1

その文字列の値は何ですか?サンプルの入力/出力、および/または最小限の実用的で再現可能なコード例を示すことが期待されます。 – Elyasin

+0

注意してください - あなたは文字列について話しています。( '1つ以上の文字列'と 'str1'などを挿入しますが)文字列ではなく正規表現でgrepを使用しています。あなたが望むものを何でもするために助けを求めるときは、正しい用語を使用してください。簡潔でテスト可能なサンプル入出力を含めるように質問を編集するときは、文字列や正規表現を検索する場合にも正確です。 –

+0

'|'の後ろにスペースが本当に必要ですか? –

答えて

2

を使用することができます。あなたはあなたが-v反転検索

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

とともに使用方法の一例を-Eフラグを使用する必要が

-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.) 

の下manページから見ることができるようにgrepの中-Eは、拡張正規表現をサポートしていますあなたの参照のため: -

$ 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

あなたの例では、動作するはずですが、あなたはまた、あなたがすなわち道正規表現式では、複数の検索パターンを使用している

grep ERROR abc* | grep -e 'str1' -e 'str2' -e 'str3' -v 
関連する問題