Regex 白鹭“;[\w]+&引用;一个字都不匹配

Regex 白鹭“;[\w]+&引用;一个字都不匹配,regex,Regex,在linux中,当我尝试一个简单的egrep来表示一个单词时,它并不匹配。以下内容不会返回任何结果,但我希望这两种情况下的sample匹配: echo "sample"|egrep "[\w]+" echo "sample"|egrep "[\w]" 但是,下面返回单词示例: echo "sample"|egrep "[\w]*" sample 使用扩展匹配,像\w这样的实体不会在方括号内展开。因此,应避免: echo sample | grep -E '\w+' (egrep是grep-

在linux中,当我尝试一个简单的egrep来表示一个单词时,它并不匹配。以下内容不会返回任何结果,但我希望这两种情况下的sample匹配:

echo "sample"|egrep "[\w]+"
echo "sample"|egrep "[\w]"
但是,下面返回单词示例

echo "sample"|egrep "[\w]*"
sample

使用扩展匹配,像
\w
这样的实体不会在方括号内展开。因此,应避免:

echo sample | grep -E '\w+'
egrep
grep-E
的不推荐别名)


如果确实要使用方括号,请使用perl正则表达式:

echo sample | grep -P '[\w]+'
(请注意,这是GNU特有的非POSIX特性。)


最后,出于您的兴趣,
[\w]*
-E
不匹配单词,但它匹配零个或多个字符。假设每个字符串中至少包含零个字符,
grep
显示每一行。比较:

echo another.sample | grep --color=always -E '[\w]*'
echo another.sample | grep --color=always -E '\w+'

您将看到第一个命令返回一个黑色字符串(表示它没有匹配任何字符)。第二个将突出显示另一个和示例,但不是点,这意味着它已正确匹配这两个单词。您可能还想尝试使用
grep-Eo

谢谢andrea:)这不是扩展匹配不起作用的错误吗?是否还有其他类似于\w的实体在括号内时不起作用?我尝试了很多搜索,但没有找到任何此类场景的参考。@anurag86:该行为不是一个bug,在grep的手册页中有描述:括号表达式是由[and]括起的字符列表。它匹配该列表中的任何单个字符。如果您查看,您将看到反斜杠字符没有特殊意义。