egrep不正确的匹配?

时间:2017-05-05 02:00:21

标签: bash unix terminal

我做

egrep "[^e]" text.txt

text.txt的位置:

hello
mellow
hello
wack

准确地说,输出不应该是wack

但终端(BASH)返回

hello
mellow
hello
wack

出于某种原因?

2 个答案:

答案 0 :(得分: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.txt中的所有字符串都不以e开头。

答案 1 :(得分:2)

这里不需要

egrep。要查看匹配的内容,您可以使用--color=auto选项(如果有)

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

您会注意到e以外的所有字符都匹配


使用-v选项,它将返回与给定搜索模式不匹配的所有行

$ grep -v 'e' text.txt 
wack


要在不使用-v的情况下修改OP的正则表达式,需要匹配整行

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

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