2016-06-13 51 views
1

我在目錄中有很多日誌文件。在那些文件中,有很多行。其中一些行包含ERROR字。4行反轉在包含許多文件的目錄中的grep搜索

我使用grep ERROR abc.*從所有abc1,abc2,abc3等文件中獲取錯誤行。

現在,有4-5 ERROR行,我想避免。

所以,我使用

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

這工作得很好。但是當我再插入1個字符串時,它不會受到影響。

我需要避免4-5個字符串..任何人都可以提出一個解決方案嗎?

+1

該字符串的值是什麼?您需要提供示例輸入/輸出和/或一個最小的,工作的,可重複的代碼示例。 – Elyasin

+0

小心 - 你正在談論字符串「('再插入1個字符串和'str1'等),但是你正在使用grep和正則表達式,而不是字符串。瞭解它們之間的區別,使用正確的工具和正確的選項當你要求幫助做任何你想做的事情時,你需要使用正確的術語。當你的問題包含簡潔的,可測試的樣本輸入/輸出時,如果你想搜索字符串或正則表達式,我們可以爲您提供最好的幫助 –

+0

在'|'之後你真的需要這個空間嗎? –

回答

2

您正在使用多個搜索模式,即在某種程度上正則表達式表達你也可以使用。 -E在grep的支持擴展的正則表達式,你可以從man頁面中看到下面

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

所以你需要使用-E標誌與-v反轉搜索

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

使用的一個例子沿供您參考: -

$ 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 
相關問題