![仅在子目录内的特定文件中查找字符串](https://linux22.com/image/2233/%E4%BB%85%E5%9C%A8%E5%AD%90%E7%9B%AE%E5%BD%95%E5%86%85%E7%9A%84%E7%89%B9%E5%AE%9A%E6%96%87%E4%BB%B6%E4%B8%AD%E6%9F%A5%E6%89%BE%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
假设我需要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
答案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
通过突出显示您要查找的内容来帮助您的眼睛。