我目前正在搜索一些类似的关键字
find -type f | xargs -grep -i -w 'weblogic_*'
但它显示所有关键字匹配weblogic
而不是weblogic_
grep
使用正则表达式,而不是globs(通配符表达式).
在正则表达式中,*
是与前一个字符或表达式相关的量词.因此,_*
正在说:零个或多个实例_
,所以NO _
也将匹配.
你可能想要:
'weblogic_.*'
Run Code Online (Sandbox Code Playgroud)
其中声明任何(.
)字符可以跟随_
零次或多次.
但请注意,在_.*
部分矛盾grep
的-w
标志中结束你的正则表达式,因为它现在只匹配单词边界上正则表达式的开头.
如果你想更明确地说明这一点,你可以使用单词边界断言\b
并删除-w
选项:
'\bweblogic_'
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这允许您省略.*
,因为默认情况下grep
执行子字符串匹配,如果不感兴趣,则无需匹配行的其余部分.
此外,没有必要xargs
:使用内置find
的-exec
主要内容更简单,更有效xargs
,可以这么说:
find . -type f -exec grep -i '\bweblogic_' {} +
Run Code Online (Sandbox Code Playgroud)
{}
表示输入文件名列表,并+
指定应尽可能多地传递输入文件名 - 如同xargs
.
最后,如果您的grep
版本支持该-R
选项,您可以find
完全放弃,只需让grep以递归方式处理所有文件:
grep -R -i '\bweblogic_' .
Run Code Online (Sandbox Code Playgroud)