简单点说,grep是查找匹配条件的行,find是搜索匹配条件的文件。
ct@ubuntu:~/Desktop/mydriver$ grep -nr ./"include"
结果: 在当前目录下显示行 r -- 递归 n---行数 ---i 查找时忽略大小写 -H或--with-filename 在显示符合范本样式的那一列之前,表示该列所属的文件名称。
.led.o.cmd:34: arch/x86/include/asm/posix_types.h \
.led.o.cmd:36: arch/x86/include/uapi/asm/posix_types_32.h \
.led.o.cmd:72: /usr/lib/gcc/i686-linux-gnu/4.8/include/stdarg.h \
ct@ubuntu:~/Desktop/mydriver$ grep -rn "open" . --include=*.c
结果: . --include=*.c -----当前目录下的 c文件中
./led_app.c:11: int fd = open("/dev/led", O_RDWR|O_CREAT);
./led_app.c:13: printf("/dev/led open %d\n",fd);
./led_app.c:16: printf("/dev/hello open fail \n");
./led.c:17:int led_drv_open(struct inode * node, struct file* h_fl)
ct@ubuntu:~$ find . -type f -name "*.c" | xargs grep "return"
结果:find . 当前目录 -type f 文件类型 f普通文件 xargs 递归查找 目标字符可带*等符号 可不带引号
./Desktop/quelink.c: return ( (ql->head==ql->rear)&&(ql->head==ql->front) );
./Desktop/quelink.c: return;
ct@ubuntu:~$ find . -name '*.c' -exec grep -l "include" {} \;
结果: exec选项后面跟随着所要执行的命令或脚本,然后是一对儿 {},一个空格和一个\,最后是一个分号。 cmd {} \;
参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
{} 花括号代表前面find查找出来的文件名
./Desktop/quelink.c
./Desktop/chain.c
./Desktop/test.c