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


10

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

我曾经用过grep -rn GetTypes *.cs,但是却遇到了一个错误grep: *.cs: No such file or directory。我不得不使用grep -rn GetTypes *,但是在这种情况下,它不仅显示了所有文件*.cs

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


Answers:


12

如果你的shell是bash≥4,把shopt -s globstar你的~/.bashrc。如果您的外壳是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 {} +

要临时设置globstar当前Bash 4+ shell 的选项,请使用:shopt -s globstar
tjanez

8

您应该检出意味深长的grep / find替代品,称为ack。它是专门为搜索源代码文件目录而设置的。

您的命令如下所示:

ack --csharp GetTypes

4

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

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

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


4

我正在使用find和grep的组合:

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

对于find,您可以替换.为目录,-name如果要查看每个文件,可以将其删除。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.