如何grep包含下划线的关键字?

时间:2014-04-30 03:43:01

标签: bash

我目前正在搜索某些类似​​

的关键字

find -type f | xargs -grep -i -w 'weblogic_*'

但它显示所有关键字与weblogic匹配,而不是weblogic_

4 个答案:

答案 0 :(得分:7)

grep使用正则表达式,而不是globs(通配符表达式)。

在正则表达式中,*与前一个字符或表达式相关的量词。因此,_*说:{em>零个或多个 _个实例,因此也会匹配NO _

你可能想要:

'weblogic_.*'

指出任何(.)字符可能会跟随_零次或更多次。

但请注意,在_.*中结束正则表达式会部分地与grep -w标志相矛盾,因为它现在只会匹配开头你的正则表达式在单词边界。

如果您想更明确地说明这一点,可以使用字边界断言\b并删除-w选项:

'\bweblogic_'

正如您所看到的,这允许您省略.*,因为默认情况下grep执行子串匹配,并且您不需要匹配剩余的该行如果不感兴趣。

此外,不需要xargs:使用内置find的{​​{1}} -exec主数据更简单,效率更高可以这么说:

xargs

find . -type f -exec grep -i '\bweblogic_' {} + 表示输入文件名列表,{}指定应尽可能多地传递输入文件名 - 与+一样。

最后,如果您的xargs版本支持grep选项,则可以完全不使用-R,只需让grep递归处理所有文件:

find

答案 1 :(得分:4)

使用模式weblogic_*时,表示查找weblogic,然后查找零次或多次_

如果您希望避免匹配weblogic_.*之后没有匹配的weblogic,则可以将其更改为使用模式_

find -type f | xargs -grep -i -w 'weblogic_.*' 

应该有用。

答案 2 :(得分:4)

尝试不使用正则表达式

find . -type f | xargs grep -i 'weblogic_'

答案 3 :(得分:1)

只需使用:

grep -i '^weblogic_.*'