有两种写法 各有优劣
grep -i -l 'x' -r /home/test |xargs grep -iv 'y' | grep -L '\.git:'| grep -iv '\.pack:'|grep -iv '\.map:' | /usr/bin/nkf | tee ~/srcGrepResult.123>
grep -i -L 'y' -r /home/test |xargs grep -ie 'x' | grep -iv '\.git:'| grep -iv '\.pack:'|grep -iv '\.map:' | /usr/bin/nkf | tee ~/srcGrepResult.123
如果是想要查询包括x同时也包括y的文件的话,如下
grep -i -l 'x' -r /home/test |xargs grep -ie 'y' | grep -L '\.git:'| grep -iv '\.pack:'|grep -iv '\.map:' | /usr/bin/nkf | tee ~/srcGrepResult.123>
记录一下各个关键字代表的意义
grep:检索
-i:不区分大小写
-l:查询 符合条件的文件 ※关键点1:如果不加这个,查询结果会是“文件 关键字段”的形式,没法进行有 效的二次检索
-r:代表查询源是个路径 而不是文件
|:管道,将查询结果作为输入源传给后面的语句
xargs:代表从管道输入的查询源不是作为文字而是作为linux命令 ※关键点2:如果不加这个,第二次的查询会变成“把第一次查询的结果作为文本格式,再次查询”,我们的目的是“把第一次查询的结果作为文件路径,再次查询对应文件内的内容”
-L:代表不包含关键字的文件
-v:代表不包含关键字的行(这里没有xargs,是为了排除一些配置文件,加不加无所谓)
tee:把输出流写入到后记文件中
~:root目录/默认目录
第一种的优势:能正确且有效率的寻找到符合条件的文件
劣势:在搜索结果里不显示符合筛选条件的关键字语句
第二种的优势:能在搜索结果里显示符合条件的关键字语句
劣势:查询效率不如上一个,而且可能会出现文件名通过管道传给后续命令时报错“No such file or directory”,不过查询结果依然会正确的显示