我想在目录中的所有文件中搜索文本字符串(而不是其子目录;我知道该-r
选项可以这样做,但这不是我想要的)。
跑步
grep "string" /path/to/dir
我已经阅读了,应该能够做到这一点,但它给了我错误:
grep:dir:是目录
接下来,我尝试
grep
在多个文件上运行。grep "string" .bashrc .bash_aliases
完美地工作。grep "string" .bash*
也按预期工作。grep "string" *
给我错误:grep: data: Is a directory grep: Desktop: Is a directory grep: Documents: Is a directory grep: Downloads: Is a directory ...
只打印错误,我没有找到匹配的行。我尝试使用该-s
选项,但无济于事。
所以,我的问题是:
为什么
grep
我应该可以在(1)中无法在目录上使用?我已经在互联网上看到很多例子。
编辑:当我说“在目录上使用grep”时,我的意思是“搜索该目录中除其子目录外的所有文件”。我相信这是grep在您将目录传递给文件而不是文件时所做的。我不正确吗?请给我一个解释,它的工作原理
grep
将解释(2)中命令的行为。
编辑:让我更具体。为什么使用通配符指定要搜索的多个文件.bash*
,而不使用*
甚至搜索./*
?如何使用来搜索目录(而不是其子目录)中的所有文件
grep
?
grep "string" .bash*
。
grep "string" * .* 2>/dev/null
或grep -s "string" * .*
*
,称为通配符。globbing不包括以点(例如.bashrc
标准)开头的文件名。您可以设置外壳程序选项,使其包含这些文件,但是如果您不知道自己在做什么,则可能会陷入混乱。可以在这里找到了解球形的好指南mywiki.wooledge.org/glob