首页 > 代码库 > Linux下完美使用find+grep实现全局代码搜索
Linux下完美使用find+grep实现全局代码搜索
作者:zhanhailiang 日期:2014-10-11
背景
在Window下有大量方便的图形化工具可以实现全局搜索,但是Linux服务器中由于使用命令行操作导致全局搜索是一个比较高的门槛。
第一种方法
首先,举个最简单的例子,在阅读代码过程中我们经常需要查看某个函数的定义,但是一般开源项目代码规模都相当庞大,此时你就可以如下使用find+grep轻松查找到该函数的定义,譬如,我想在php源码中搜索is_array方法的定义,如下:
[root@AY140321223706700af3Z standard]# find . -name ‘*.c‘ -exec grep -Hna ‘is_array‘ {} \; ./basic_functions.c:2540:ZEND_BEGIN_ARG_INFO(arginfo_is_array, 0) ./basic_functions.c:3049: PHP_FE(is_array, arginfo_is_array) ./type.c:283:/* {{{ proto bool is_array(mixed var) ./type.c:285:PHP_FUNCTION(is_array)
这里需要注意两点: 1. find使用-exec时“;”是必备参数,如下两种方法都会导致“find: missing argument to `-exec‘”,其中第一个命令报错是因为确实缺少“;”,而第二个命令报错是因为在shell中执行语句时“;”被认为是结束符,而不是-exec的参数,故使用时必须对其进行转义。
[root@AY140321223706700af3Z standard]# find . -name ‘*.c‘ -exec grep -Hna ‘is_array‘ {} find: missing argument to `-exec‘ [root@AY140321223706700af3Z standard]# find . -name ‘*.c‘ -exec grep -Hna ‘is_array‘ {} ; find: missing argument to `-exec‘
[root@AY140321223706700af3Z standard]# find --help actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ; -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;
2. 如上例,笔者在使用grep时添加了-Hna,其分别输出文件路径,行号,及相应的文本内容:
[root@AY140321223706700af3Z standard]# grep --help -n, --line-number print line number with output lines --line-buffered flush output on every line -H, --with-filename print the filename for each match -a, --text equivalent to --binary-files=text
第二种方法
如果针对查看项目查看源码的需求,那么在服务器上安装配置好ctags工具来配合vim,将是完美方案,请参考《Sublime Text 2安装Ctags插件》相似原理在Linux上安装配置即可,强烈技术流的同学使用该方法。
Linux下完美使用find+grep实现全局代码搜索
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。