仅在子目录内的特定文件中查找字符串

仅在子目录内的特定文件中查找字符串

假设我需要GetTypes()在所有 C# 源文件 ( .cs) 目录/子目录中找到该函数。

我用过grep -rn GetTypes *.cs,但出现错误grep: *.cs: No such file or directory。我必须使用grep -rn GetTypes *,但在这种情况下它不仅显示所有文件*.cs

.cs我需要使用什么命令才能仅在文件中查找字符串?

答案1

如果您的 shell 是 bash ≥4,请将shopt -s globstar您的~/.bashrc.如果你的 shell 是 zsh,那就没问题了。然后你就可以运行

grep -n GetTypes **/*.cs

**/*.cs*.cs表示当前目录或其子目录中递归匹配的所有文件。

如果您没有运行支持**但 grep 支持的shell --include,则可以执行递归 grep 并告诉grep仅考虑与某些模式匹配的文件。请注意文件名模式周围的引号:它由 grep 解释,而不是由 shell 解释。

grep -rn --include='*.cs' GetTypes .

grep -r仅使用便携式工具(有些系统根本没有),find用于目录遍历部分和grep文本搜索部分。

find . -name '*.cs' -exec grep -n GetTypes {} +

答案2

您应该查看一下出色的小 grep/find 替代品,称为ack。它专门用于搜索源代码文件的目录。

您的命令将如下所示:

ack --csharp GetTypes

答案3

如果您使用 GNU grep,您可以指定在递归目录遍历中包含哪些文件:

grep --include '*.cs' -rn GetTypes .

(其中最后一个句点表示当前工作目录作为遍历的根目录)

答案4

我使用 find 和 grep 的组合:

find . -name "*.cs" | xargs grep "GetTypes" -bn --color=auto

对于,如果您想查看每个文件,find可以.用目录替换并删除。-name

对于grep-bn将打印位置和行号,并--color通过突出显示您要查找的内容来帮助您的眼睛。

相关内容