2017-05-05 5 views
0

私はtext.txtがあるegrepが正しく一致しませんか?

egrep "[^e]" text.txt

行います

hello 
mellow 
hello 
wack 

ので正確には、出力がwackすべきではありませんの?

が、端子(BASH)が何らかの理由で

hello 
mellow 
hello 
wack 

を返しますか?

答えて

3

と一致する必要があります。 [e]内部

あなたのコマンドで
~]# egrep -v '[e]' text.txt 
wack 
~]# egrep '[e]' text.txt 
hello 
mellow 
hello 

^e除いて、入力ファイル内のすべてのものと一致しました。 text.txt内の文字列のどれもがeで始まりませんので、あなたの入力ファイルに文字列eeeeを持っている場合は、[e]^を入れた場合たとえば、それはeeee

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

以外のすべてを返すでしょう、それは何も一致しません。

+0

だから '[^ e]'は何をするのですか?私はそれを理解していない。単語にeが含まれていれば、大丈夫ですか? –

+0

文字列中の 'e'以外のものとすべて一致します。 'e'以外に文字列の中に他の文字があれば無用です。 – iamauser

+0

'e'を含むすべてのものをPURE正規表現でフィルタリングしたいのですが? '-v'フラグを使用しないでください。 –

2

egrepここでは不要です。あなたはe以外のすべての文字が


使用-vオプション一致していたことに気づくでしょう

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

利用できる、それが与えられたと一致しないすべての行が返されます場合はマッチしたかを確認するには、--color=autoオプションを使用することができます検索パターンが

$ grep -v 'e' text.txt 
wack 


を使用せずに、OPの正規表現を変更するにはは、あなたがegrepと負のマッチングをしたい場合は、あなたが-vオプションが必要になり、行全体に

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

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

これはむしろ色付けを行う 'grep'を持っていると思います。 Unixのすべての亜種にこのようなgrepがあるわけではありません。 –

+0

@JonathanLefflerそのおかげで、ありがとう、編集された答え – Sundeep

関連する問題