我试图弄清楚如何使用grep
来搜索特定字符串(为了简单起见)"9"
,并且我想在包含字符 的所有文件上搜索这个字符串,再次为了简单起见b
。
我试过了grep -e "9" b
,但它说找不到文件b
。 (如果我不使用该选项,则相同-e
)。
我知道我可以这么做grep -e "9" *b*
,但这不是我的重点。我想要使用正则表达式的常用工具来进行文件名匹配。
我对获得这个的复杂方法不感兴趣。我希望有一个简单的选项grep
可以用于此目的。我仔细阅读了man
,但找不到任何有用的东西,但我对 shell 脚本还很陌生,所以我很容易会错过它。
是否可以使用正则表达式进行文件名匹配只是 grep
?如果是这样,怎么办?
答案1
其本身没有选项grep
可以使用正则表达式来匹配文件。
您有两个选择:
使用 shell glob,例如
grep -e '9' b*
上面是非常简单的示例,但是您可以匹配非常奇特的文件名,特别是如果您使用某些扩展机制。下面列出了一些
bash
可以打开的有用功能,类似的功能可以在zsh
其他 shell 中找到:globstar
(用于**
匹配整个目录树)nocaseglob
(不区分大小写的匹配)extglob
(扩展模式:?()
,@()
,!()
,*()
,+()
)nullglob
(不匹配的模式扩展为空字符串)
用于
find
搜索文件并从中执行grep
:find . -name 'b*' -exec grep '9' {} +
或者如果需要正则表达式:
find . -regex './b.*' -exec grep '9' {} +
这种方法的优点是你可以添加另一个开关来
find
选择文件,不仅可以按名称,还可以按日期、大小等。这不能用标准 shell 的 glob 来完成,除非你使用zsh
它的强大功能全局限定符。