【发布时间】:2013-03-19 14:12:29
【问题描述】:
我下载了一些程序的源代码 并将其放入文件夹中 我想从文件夹中找到一个函数声明 在终端上,如何使用 shell 命令执行此操作? 谢谢!
【问题讨论】:
-
这个源代码中的函数声明是什么样的?
-
我只想从一个文件夹里找字符串,文件夹里面有很多文件,子文件夹
我下载了一些程序的源代码 并将其放入文件夹中 我想从文件夹中找到一个函数声明 在终端上,如何使用 shell 命令执行此操作? 谢谢!
【问题讨论】:
使用grep:
grep -Hri function_name .
如果你只想要路径:
grep -ril function_name .
. 代表当前目录
-i : 不区分大小写
-r : 递归
-H : 打印每场比赛的文件名
-l : 抑制正常输出;而是打印通常会从中打印输出的每个输入文件的名称。
一个有趣的工具是ack,它可以避免在.svn、.cvs、.git dirs 等目录中搜索......它旨在搜索代码。
例子:
$ cd /usr/share/perl5
$ ack -r 'Larry\s+Wall'
site_perl/Inline/C.pm
370:# bindings to. This code is mostly hacked out of Larry Wall's xsubpp program.
core_perl/overload/numbers.pm
5:# Copyright (C) 2008 by Larry Wall and others
core_perl/CPAN.pm
876:# From: Larry Wall <larry@wall.org>
或者只是文件路径:
$ ack -rl 'Larry\s+Wall'
vendor_perl/LWP.pm
site_perl/Inline/C.pm
core_perl/overload/numbers.pm
core_perl/CPAN.pm
core_perl/SelfLoader.pm
core_perl/AutoLoader.pm
core_perl/AutoSplit.pm
core_perl/Test/Harness.pm
core_perl/XSLoader.pm
core_perl/DB.pm
不需要以ack 结尾的.(与grep 相比)
【讨论】:
--include=*.<file_postfix>。
这将遍历您打开的目录中的所有文件和任何子目录(尽管如果文件或目录名称中有空格,它会搞砸),将在所有文件中搜索您放置的 FUNCTION,并输出文件的路径并显示匹配的行。通过cding 运行它到您打开的目录,(并将 FUNCTION 替换为您要查找的函数)。
find . -type f | xargs grep FUNCTION
【讨论】:
-?
- 是必需的,但应附加到单词type。我会解决的,谢谢。
尝试使用CScope。您还需要安装 vi/vim。
安装好后,在你要查找功能的文件夹中运行以下命令即可:
cscope -R
之后,会出现一个菜单,显示了许多选项来查找所有符号、函数定义、调用函数的函数等。
【讨论】: