- 已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。
此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site的主题有关,您可以留下评论,说明在何处可以回答此问题。
八年前就关门了。
Improve this question
我目前正在处理一个C项目,其中包含了50多个. h和. c文件。我想知道是否有一种快速的方法可以搜索特定的代码行(例如ctrl + f搜索窗口),而不必逐个搜索每个文件。
先谢谢你
5条答案
按热度按时间7dl7o3gd1#
在Linux/Unix上有一个叫做
grep
的命令行工具,你可以用它在多个文件中搜索一个字符串。例如,如果我想在所有文件中搜索strcpy
:-r
提供递归搜索,这样你就可以搜索到所有目录中的所有文件(从当前目录开始)。-s
忽略警告,以防你遇到不可读的文件。现在,如果你想搜索一些自定义的东西,你不记得大小写,有像
-i
这样的选项来允许大小写不敏感的搜索。如果您忘记了要查找的内容的确切名称,也可以使用正则表达式(实际上,名称“grep”来自sed命令g/re/p -- global/regular expression/print:
k75qkfdt2#
安装cygwin如果你不使用 *nix和使用find/grep,例如.
实际上,我把它做成了一个可以用
findinsrc path1, [path2, ...] pattern
调用的小脚本findinsrc
。find "${@:1:$#-1}" -type f \( -iname '*.c' -o -iname '*.cpp' -o -iname '*.h' -o -iname '*.hpp' \) -print0 | xargs -0 grep -in "${@:$#}"
"${@:1:$#-1}"
是位置参数1..n-1,即,作为find
的起始点提供的路径。"${@:$#}"
是最后一个参数,即提供给grep的模式。-o
“选项”是组合搜索条件的逻辑OR;因为选项的“默认”组合是AND,所以所有的OR必须用括号括起来才能正确求值。因为括号对shell有特殊的意义,所以必须对它们进行转义,以便将它们作为命令行参数传递到find
。-print0
指示find
不使用换行符或空格,而是使用不能出现在路径名中的空字符来分隔其输出项;这样,路径中的空白(“我的图片”无意义)和路径之间的分隔之间就有了明显的区别。-iname
是不区分大小写的搜索,以防文件以.CPP
等结尾。xargs -0
专门用于摘要find -print0
输出:xargs将在空字节处而不是在空白处分隔从stdin读取的参数。grep -in
:-i
指示grep执行一个不区分大小写的搜索(这适合我的坏内存,并且完全迎合了这种“不管大小写如何都要找到该死的函数,您知道我的意思”的用例)。-n
除了打印匹配发生的文件名之外,还打印行号。我有类似的脚本
findinmake
,其中find
模式包括常规的Makefile、CMakeLists.txt和专有文件名;和findinscripts
,它查看bat,cmd和sh文件。这似乎比在通用脚本中引入选项更容易。zbwhf8kr3#
您可以使用grep在终端/命令行中搜索文件。
-R为递归,也在所有子目录中搜索
然后串你想要的
然后是当前目录的位置.
dldeef674#
在windows上,你可以使用findstr来查找包含字符串的文件,这些字符串或者完全匹配或者正则表达式匹配指定的字符串/模式。
命令行中的命令会给予你用法。它也可以递归子目录(/s)。
0tdrvxhp5#
如果您使用文本编辑器和shell,那么您可以使用
grep
等shell工具。但是你应该考虑使用一个IDE,比如Eclipse(不仅仅是Java),Netbeans(有一个C插件)或者KDevelop. IDE有键盘快捷键,比如“查找所有被调用的高亮显示的函数”.
当然还有Emacs...