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的搜索路径 ...
随机推荐
- 微信小程序中的图形验证码
可以在utils中新建一个mcaptcha.js 代码如下: module.exports = class Mcaptcha { constructor(options) { this.options ...
- 【C++】朝花夕拾——表达式树
表达式树: 叶子是操作数,其余结点为操作符,是二叉树的其中一种应用 ====================我是分割线====================== 一棵表达式树如下图: 若是对它做中序 ...
- 恩智浦Freescale Cortex-A9 迅为IMX6开发板平台初体验
iTOP-i.MX6 开发板预装 Android4.4 系统,采用 9.7 寸(或者 7 寸或者 4.3 寸)IPS 屏 幕,至少 5 点以上触控,操作流畅,无论是高清视频.游戏等都会有上佳的表现,实 ...
- Dynamic type checking and runtime type information
动态类型的关键是将动态对象与实际类型信息绑定. See also: Dynamic programming language and Interpreted language Dynamic type ...
- 生产者-消费者中的缓冲区:BlockingQueue接口
BlockingQueue接口使用场景相信大家对生产者-消费者模式不陌生,这个经典的多线程协作模式,最简单的描述就是生产者线程往内存缓冲区中提交任务,消费者线程从内存缓冲区里获取任务执行.在生产者-消 ...
- 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...
- MFC线程获取主窗口句柄
CWnd* h_q = AfxGetApp()->GetMainWnd(); //获取主窗口的句柄
- 05CSS链接
CSS链接 链接的四种状态: • a:link - 普通的.未被访问的链接 • a:visited - 用户已访问的链接 • a:hover - 鼠标指针位于链接的上方 • a:active ...
- JavaSE-05 数组
学习要点 数组的基本用法 数组的典型应用 数组相关概念 问题 Java考试结束后,老师给小强分配了一项任务,让他计算全班(30人)的平均分,按照目前的知识结构,如何实现? 问题分析 数组 定义:数组是 ...
- 从C#程序中调用非受管DLLs
从C#程序中调用非受管DLLs 文章概要: 众所周知,.NET已经渐渐成为一种技术时尚,那么C#很自然也成为一种编程时尚.如何利用浩如烟海的Win32 API以及以前所编写的 Win32 代码已经成为 ...