$ grep main_navtop_f *xml -RHn --include="*.xml" --exclude="*.java" --exclude-dir=".svn" --color ./
./res/values/public.xml:221: <public type="drawable" name="main_navtop_f" id="0x7f0200a3" />
./res/values/public.xml:270: <public type="drawable" name="skin1_main_navtop_f" id="0x7f0200de" />
./res/values/public.xml:285: <public type="drawable" name="skin2_main_navtop_f" id="0x7f0200f2" />
grep命令功能强大,但参数较多,以上这条命令常用用法都有了,记录下来备用。
参数解释如下:
-R 递归目录查询
-H 显示匹配行所在的文件的文件名
-n 显示匹配行在匹配文件中的行号
--include= 查询什么类型的文件,跟一个pattern
--exclude= 排除什么类型的文件,跟一个pattern,在上面的命令中这一句是多余的,它跟--include一次肯定只使用一个
--exclude-dir= 排除什么目录,跟一个pattern
--color 彩色显示结果,文件名,行号,匹配段会彩色显示
./ 表示查询当前目录
跟find命令配合也可实现上面这些功能。
cly@topgun /cygdrive/c/Users/cly/Desktop/apktool/shuqi
$ find ./ -type f -name "*.xml" -exec grep -Hn --color main_navtop_f {} \;
./res/values/public.xml:221: <public type="drawable" name="main_navtop_f" id="0x7f0200a3" />
./res/values/public.xml:270: <public type="drawable" name="skin1_main_navtop_f" id="0x7f0200de" />
./res/values/public.xml:285: <public type="drawable" name="skin2_main_navtop_f" id="0x7f0200f2" />
--exclude 在find命令中可以用-not -name "*.java" 来实现。
#2012.9.3加入
grep 匹配多个关键字
grep -E "word1|word2|word3" file满足任意条件(word1、word2和word3之一)将匹配
grep word1 file | grep word2 |grep word3 必须同时满足三个条件(word1、word2和word3)才匹配
#加入完毕
#2012.10.29加入
grep -I 不匹配二进制文件,是大写的i,而不是小写的L,小写的l表示输出匹配的文件列表。
#加入完毕