zoukankan      html  css  js  c++  java
  • Linux下完美使用find+grep实现全局代码搜索

      作者:zhanhailiang 日期:2014-10-11

    背景

    在Window下有大量方便的图形化工具能够实现全局搜索,可是Linuxserver中因为使用命令行操作导致全局搜索是一个比較高的门槛。

    第一种方法

    首先,举个最简单的样例,在阅读代码过程中我们常常须要查看某个函数的定义,可是一般开源项目代码规模都相当庞大,此时你就能够例如以下使用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

    另外一种方法

    假设针对查看项目查看源代码的需求,那么在server上安装配置好ctags工具来配合vim,将是完美方案,请參考《Sublime Text 2安装Ctags插件》相似原理在Linux上安装配置就可以,强烈技术流的同学使用该方法。

  • 相关阅读:
    看着四年前的代码,那时奋斗的模样,百感滋味
    操作系统中进程调度策略有哪几种?
    Linux操作系统及调用接口
    wpf 图像浏览(平移,缩放)
    C# double小数点的取舍
    C# 读写16位tif图片灰度数据
    WPF Slider滑块的使用
    WPF使用MVVMLight的ViewModel 访问控件的属性方法事件以及多页面传递信息
    苹果手机小米手环5收不到微信QQ消息提醒的解决办法
    AD覆铜设置规则
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7142400.html
Copyright © 2011-2022 走看看