在Mac或者Linux下使用grep进行文件内容查找时,如果给定的目标搜索路径是当前目录,那么它默认只搜索当前目录下的文件,而不会搜索其下面子目录中的文件内容,如果想级联搜索下级目录,需要使用一个“-r”参数:
grep -n -r "GET" .
上面的命令将会找出当前目录“.”及当前目录中所有下级目录中的文件中包含“GET”关键字的文件,并打印出行号和文件名
其中:
-n : 代表输出时打印行号
-r : 代表进行目录递归搜索,即搜索下级所有子目录
另外还介绍几个常用的选项:
-I : 大写的“i”,用来忽略所有的二进制文件
-i : 用来进行忽略大小写的匹配,也就是对大小写不敏感
-A : 这个选项可以打印出匹配行之后几行的内容,比如:grep -A 3 "get" test.txt
-B : 这个选项可以打印出匹配行之前几行的内容,比如: grep -B 3 "get" test.txt
-C : 这个选项可以打印出匹配行之前和之后几行的内容(注意: -C之后的参数要紧挨着中间不留空格),比如:grep -C2 "get" test.txt
下面举一个综合的例子:
文件为test.txt,内容如下:
get 1 GET 2 GET 3 GET 4 get 4 post 1 post 2 post 3 post 4 post 5
运行命令并查看输出:
运行命令:grep -A 2 -B 2 -i -n "get" test.txt 输出结果如下: 1:get 1 2:GET 2 3:GET 3 4:GET 4 5:get 4 6-post 1 7-post 2 运行命令:grep -C2 -i -n "get" test.txt 输出结果如下: 1:get 1 2:GET 2 3:GET 3 4:GET 4 5:get 4 6-post 1 7-post 2
可以发现两次运行命令的输出结果一致,证明了“-A 2 -B 2”选项等同于"-C2"的事实,同时还发现一个情况,即使每行都有匹配到get,那么-A 2 和 -B 2输出的结果会进行合并,而不是重复输出。