我目前正在搜索某些类似
的关键字 find -type f | xargs -grep -i -w 'weblogic_*'
但它显示所有关键字与weblogic
匹配,而不是weblogic_
答案 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_.*'