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下完美使用find+grep实现全局代码搜索的更多相关文章
- Arch Linux下Visual Stdio Code在格式化C代码时报错
libtinfo.so.5: cannot open shared object file: No such file or directory Arch Linux下Visual Stdio Cod ...
- Linux下获取本机IP地址的代码
Linux下获取本机IP地址的代码,返回值即为互联网标准点分格式的字符串. #define ETH_NAME "eth0" //获得本机IP地址 char* GetLocalAdd ...
- Python基础-面向过程编程实现Linux下cat -rl ‘dir’ |grep ‘keywords’ 功能
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
- Guake Terminal ── linux下完美帅气的终端
虽说如今非常多Linux发行版.比方Ubuntu,已经基本上能够採用GUI来完毕绝大部分一般性的任务. 可是,终端程序对于linux用户来说仍是不可缺少的. Gnome自带的gnome-termina ...
- linux下C语言编程,include的默认搜索路径
C语言编程时,发现细节的魅力很大.较为详细了看了一下关于include的知识,发现了几点新知: 1.include<头文件名>和include"头文件名" 如:incl ...
- Linux下高效实用的grep命令
Linux系统中的grep命令是一种功能强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则 ...
- linux下使用find xargs grep查找文件及文件内容
1,在某个路径下查文件. 在/etc下查找“*.log”的文件 find /etc -name “*.log” 2,扩展,列出某个路径下所有文件,包括子目录. find /etc -name “*” ...
- 【转载】Linux下动态共享库加载时的搜索路径详解
转载自:http://www.eefocus.com/article/09-04/71617s.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading ...
- Linux下动态共享库加载时的搜索路径详解
对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径 ...
随机推荐
- K近邻法(K-Nearest Neighbor,KNN)
KNN是一种基本分类与回归方法,本篇只总结分类问题中的KNN. 输入:样本的特征向量,对应于特征空间中的点 输出:样本的类别,可取多类 算法思想:给定一个样本类别已知的训练数据集,对于新样本,根据其K ...
- cron on Centos
1. crond.service 2. configuration 2.0 format # Example of job definition: # .---------------- minute ...
- socket编程(Java实现)
主要是前段时间学习的网络知识的基于TCP与UDP编程,Java实现简单的大小写字母的转化,该文主要参考: https://blog.csdn.net/yjp19871013/article/detai ...
- java上传文件大小转换(字节转kb/mb/gb)
/** * 字节转kb/mb/gb * @param size * @return */ public String getPrintSize(long size) { //如果字节数少于1024,则 ...
- 基于html实现一个todolist待办事项
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- node学习的一些网站
Node.js 包教不包会 篇幅比较少 node express 入门教程 nodejs定时任务 一个nodejs博客 [NodeJS 学习笔记04]新闻发布系统 过年7天乐,学nodejs 也快乐 ...
- Android渲染器Shader:LinearGradient(一)
Android渲染器Shader:LinearGradient(一) LinearGradient是Android的线性渲染器.我写5个LinearGradient渲染器渲染后的View表现结果 ...
- 全文搜索(A)-相关性
文章:搜索相关性 文章:推荐系统中相似度算法介绍及效果测试 文章:常用的相似度计算方法原理及实现 文章:推荐系统用户相似度计算方法研究
- CSU1217
就跟数字出现奇数次道理是一样的,将一个数转化为2进制后找出现奇数次个1的位置,最后将其输出来便是出现奇数次的数 #include <cstdio> int main() { int n,a ...
- hdu 4091 数学思维题贪心
/* 参看博客地址:http://blog.csdn.net/oceanlight/article/details/7857713 重点是取完最优的后剩余的rest=n%lcm+lcm;中性价比小的数 ...