查找first.c和second.c两个文件中含有void的行:grep void first.c second.c
查找当前目录下所有c文件中含有void的行:grep void *.c
查找当前目录下所有文件(不含子文件夹)中含有void的行:grep void * (遇到文件夹会产生警告信息)
查找当前目录下所有文件(不含子文件夹)中含有void的行,忽略子文件夹产生的警告信息:grep void * -d skip
查找当前目录下所有文件及其子文件夹中含有void的行,并显示行号:grep void -nr(-n是指显示行号,-r是指递归遍历文件夹)
查找指定文件夹Documents/codes/C下的所有文件及子文件夹含有void的行,并显示行号:grep void -nr Documents/codes/C
查找指定文件夹Documents/codes/C下的所有文件及子文件夹含有单词void的行,并显示行号:grep void -nrw Documents/codes/C (-w是指匹配整个单词)
正则表达式匹配:grep "[a-z]\{2\}" -nrw (查找含有两个字母的单词所在行和行号,{2}表示匹配两次,{}必须要转义)
忽略二进制文件的匹配结果,只显示文本文件(-I,大写的i):grep "s\{2\}" -Inrw(查找ss)
查找当前文件夹及子文件夹下文件名为shm*.c中以shm开头的单词的行及其行号:grep "shm\w*" -Inrw --include=shm*.c
查找系统头文件库中指定函数名的函数声明所在的头文件和行数:
grep gtk_application_window_new -Inrw /usr/include/gtk-3.0/gtk(查找gtk_application_window_new函数的声明)
grep g_signal_connect -Inrw /usr/include/glib-2.0/ --include=*.h (查找g_signal_connect的声明,只查找*.h头文件)
grep g_application_run -Inrw /usr/include/glib-2.0/ --include=*.h(查找g_application_run的声明)
grep g_signal_ -Inr /usr/include/glib-2.0/ --include=*.h(查找所有含有g_signal_的函数的声明,注意没有-w选项)
查找当前文件夹及子文件夹下的文件中调用了指定函数名函数的c文件和行数:
grep g_signal_ -Inr --include=*.c(函数名部分匹配,只查找c文件)
grep g_signal_connect -Inrw(函数名完全匹配)
查看当前目录及子目录下的所有文件:find
查找当前目录及子目录下所有的c文件的文件名:find -name "*.c"(文件名必须要加引号)
查看/usr/include/gtk-3.0/gtk目录及子目录下的所有文件:find /usr/include/gtk-3.0/gtk
查找/etc目录及子目录下所有的conf文件的文件名:find /etc -name "*.conf"
不仅显示匹配行,还要显示后两行(After):grep void -Inrw -A 2
不仅显示匹配行,还要显示前两行(Before):grep void -Inrw -B 2
不仅显示匹配行,还要显示前后两行(before and after):grep void -Inrw -C 2
大小写不敏感:grep VOID * -i
奇淫技巧:当然这是我没有使用任何编辑器,同时也没有安装任何VIM插件的查找方式(本人习惯使用atom remoteftp 插件去处理)
磨刀不误砍柴工,建议先看看Documentation/CodingStyle,这类问题可以用
grep -lr "struct task_struct {" [KERN_SRC_PATH]/*
来找答案,一般只要扫include 和arch/[ARCH]就可以了。
例如要查找:内核中进程对应的结构体task_struct的定义处,如下图所示: