我正在使用以下代码
$ 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的语法错误,尽管它可能不会告诉您。星号 (*) 是一个修饰符,它告诉正则表达式解析器您对前一个字符的零个或多个字符感兴趣。在第一个表达式中,没有前面的字符,因为单引号 (') 不算在内。