grep *gcc* 不匹配任何内容

grep *gcc* 不匹配任何内容

我正在使用以下代码

$ rpm -qa | grep -i gcc
libgcc-4.8.3-7.fc20.i686
gcc-c++-4.8.3-7.fc20.x86_64
gcc-4.8.3-7.fc20.x86_64
libgcc-4.8.3-7.fc20.x86_64

$ rpm -qa | grep -i *gcc*
$ 

我希望第二种方法与第一种方法相同,但它什么也不打印。我使用的grep命令正确吗?

答案1

一种方法是使用egrep, 或grep -E像这样:

rpm -qa | egrep -i '.*gcc.*'

这使用提供的搜索字符串作为正则表达式,其中句点 (.) 代表任意字符,星号 (*) 代表其中一个或多个字符。

我相信您尝试使用的rpm -qa | grep -i *gcc*是大多数 shell 的一项功能,称为文件名通配。此技术不适用于 grep。它假设您希望gcc字符串中包含所有内容,如第一个示例中所示,而无需显式指定它。

*gcc*编辑:和之间的区别.*gcc.*是第一个实际上是egrep的语法错误,尽管它可能不会告诉您。星号 (*) 是一个修饰符,它告诉正则表达式解析器您对前一个字符的零个或多个字符感兴趣。在第一个表达式中,没有前面的字符,因为单引号 (') 不算在内。

相关内容