我试图弄清楚如何使用它grep
来搜索特定的字符串(为简单起见)"9"
,并且,为了简单起见,我想在所有包含该字符的文件中进行搜索b
。
我试过了grep -e "9" b
,但是它说找不到文件b
。(如果我不使用该-e
选项,则相同)。
我知道我可以争取grep -e "9" *b*
,但这不是我的意思。我希望将正则表达式的常用工具用于文件名匹配。
我对复杂的获取方式不感兴趣。我希望可以有一个简单的选择grep
。我仔细阅读过man
,但找不到任何有用的东西,但是我对Shell脚本非常陌生,因此很容易会错过它。
是否有可能使用使用正则表达式匹配文件名只 grep
?如果是这样,怎么办?
grep
本身没有使用regexp匹配文件的选项。
您有两种选择:
使用shell glob,例如
grep -e '9' b*
上面是一个非常简单的示例,但是您可以匹配真正精美的文件名,尤其是在使用某些扩展机制的情况下。波纹管是一些有用bash
的功能的列表,可以打开这些功能,可以在zsh
其他外壳中找到类似的功能:
globstar
(用于**
匹配整个目录树)nocaseglob
(不区分大小写的匹配)extglob
(扩展模式:?()
,@()
,!()
,*()
,+()
)nullglob
(非匹配模式扩展为空字符串)使用find
搜索文件和执行grep
来自它:
find . -name 'b*' -exec grep '9' {} +
或是否需要使用正则表达式:
find . -regex './b.*' -exec grep '9' {} +
这种方法的优势在于,您find
不仅可以通过名称添加名称,还可以通过日期,大小等添加其他开关来选择文件。除非使用zsh
并使用其强大的glob限定符,否则标准Shell的glob无法做到这一点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句