2017-05-05 177 views
0

egrep不正確的匹配?

egrep "[^e]" text.txt

其中text.txt是:

hello 
mellow 
hello 
wack 

所以準確地說,應該不是輸出是wack

但終端(BASH)返回

hello 
mellow 
hello 
wack 

出於某種原因?

回答

3

如果你想有一個負匹配與egrep,你將需要-v選項。

~]# egrep -v '[e]' text.txt 
wack 
~]# egrep '[e]' text.txt 
hello 
mellow 
hello 

在您的命令^[e]匹配除了e輸入文件裏面的一切。例如,如果你輸入的文件有一個字符串eeee,那麼它將返回一切,除了eeee

~]# egrep '[^e]' text.txt 
hello 
mellow 
hello 
wack 

如果你把^[e],因爲沒有任何字符串裏的text.txte開始它不會匹配任何東西。

+0

那麼剛纔'[^ e]'做了什麼呢?我不明白。如果一個單詞包含e,那好嗎? –

+0

它匹配除字符串中的「e」之外的所有內容。如果除了'e'之外的字符串中還有其他字符是沒有用的。 – iamauser

+0

如果我想用PURE正則表達式過濾掉所有包含'e'的東西?那麼不要使用'-v'標誌? –

2

egrep這裏不需要。要查看匹配,你可以使用--color=auto選項(如果可用)

$ grep --color=auto '[^e]' text.txt 
hello 
mellow 
hello 
wack 

你會發現,比e其他所有字符相匹配


使用-v選項,它會返回所有不匹配給定的線搜索模式

$ grep -v 'e' text.txt 
wack 


要修改OP的正則表達式,而不使用-v,需要匹配全線

$ grep '^[^e]*$' text.txt 
wack 

$ # or with -x if available 
$ grep -x '[^e]*' text.txt 
wack 
+1

確實假設你已經有了一個grep來做着色;並不是所有的Unix版本都有這樣的'grep'。 –

+0

@JonathanLeffler感謝那個珍聞,編輯回答 – Sundeep