Linux下在文件夹所有文件中查找相关内容
先导
本文是为了记录在编程中进行一些在文件夹中查找某些关键字进行配置时查找文件过于麻烦的解决办法
在Linux开发中使用一些命令或者命令的配合进行查找文件内容及匹配关键词还是比较方便的。
使用grep
grep是在使用Linux时经常会用到的一个命令了,这个命令平时大都主要用来进行对一段输出的关键字定位,但是这个命令也可以通过使用某些参数来达到文件夹文件内容遍历的效果
命令原型
grep -nr "str" path
参数说明
- grep: 就是grep命令
- -nr: n是line number行号,r是recursive,可以理解为遍历文件文件夹
- "str": 双引号里面的str就是要查找的内容,用双引号何以使用空格和一些字符进行查找
- path: path就是查找路径,默认是
./
,也就是当前目录开始,也可以手动指定目录
实例
grep -nr "/bin/bash" /home/$USER
优缺点
- 优点:命令简单方便,简短
- 缺点:会遍历所有文件,效率较低
使用find、xargs和grep配合
find是查找指令,用来查找文件的;xargs可以将标准输入作为另一个命令的参数;grep上面已经解释过了。那么,如果使用find来循环查找文件,使用他输出的文件名作为参数给xargs,xargs再将文件名作为grep的参数输入,使用grep来查找文件内容进行定位不久可以实现文件内容查找了吗
命令原型
find path -name "PATTEN" | xargs grep -n "str" | grep "str"
参数说明
- find、xargs、grep:上面已经讲过,分别是三个软件
- name:就是通过名字查找,后面跟着的参数可以通过正则表达式类似的方法限定文件名
- 其他grep或者类似的参数据不赘述了
实例
find /home/$USER/.config -name "*.sh" | xargs grep "/bin/bash" | grep "/bin/bash"
优缺点
- 优点:可以通过-name来限定文件名,从而减少grep查看文件内容的次数,提高效率
- 缺点:命令冗长,难记
后记
关于这两种方法的取舍其实还是看日常使用过程,如果文件夹内的文件较少,可以使用第一种方法,方便快捷;但是如果文件很多的情况下为了节省查找时间,可以使用第二种方法,能够较为快速地查找到想要的内容。