命令格式
grep [options] “string to find” filename
- “string to find” :为要匹配的模式,可以是字符串、也可以是正则表达式
- filename:为要查找的文件名。可以是多个文件或者目录
常见选项
- -i:忽略字符大小写
- -v:取反,即输出不匹配的那些文本行
- -n:输出行号
- -l:输出能匹配模式的文件名。-L相反
- -q:静默输出
- -r:递归查找
- -c:计算匹配成功的行数
- -E:使用正则表达式匹配
- -o:只输出文中匹配的部分
- -A:显示匹配行及前几行。(A3表示匹配行及前3行)
- -B:显示匹配行及后几行。(B3表示匹配行及后3行)
- -C:显示匹配行及前后几行。(C3表示匹配行及前后3行)
- –include:指定需要搜索的文件
- –exclude:排除需要搜索的文件
- –exclude-dir:排除需要搜索的目录
- –color=auto:标记匹配颜色
常见用法
- grep -rni “xxx” filename/dir (在filename中递归查找字符串xxx,同时输出行号)
grep -rni "hello" test test/test1.c:5: printf( "hello world"); test/test2.C:5: printf( "Hello world"');
- grep -c “xxx” filename (统计文件中能够匹配的行数)
grep -c "hello" test1.c test2.c test1.c:1 test2.c:1 grep -ci "hello" test1.c test2.c test1.c:1 test2.c:0
- 指定/排除需要搜索的文件(–include,–exclude,–exclude-dir)
grep -r "hello" ./test --include=*.{c,cpp}//搜索test目录中的.c和. cpp文件中含有hello的行 test/test1.c: printf ("hello world"); test/test3.cpp: printf("hello world"); grep -rni "hello" ./test --include=*.{c,cpp} test/test1.c:5: printf("hello world"); test/test3.cpp:5: printf ( "hello world"); test/test2.c:5: printf( "Hello world");
grep -r "hello" ./test --exclude="readme"//忽略readme文件
grep -r "hello" ./test --exclude-dir=".git"/ /忽略.git目录
- grep -o “xxx” filename(只输出文中匹配到的文本)
grep -ro "hello" ./test --include=*.{c,cpp} test/test1.c: test/test3.cpp:hello
- grep -l “xxx” filename1 filename2 … (搜索多个文件中的字符串,并标记文件名)
grep -rl "hello" ./test --include=*.{c,cpp} test/test1.c test/test3.cpp