在Linux系统当中,如何搜、索查找文件里面的内容呢? 这个应该是系统维护、管理当中遇到最常见的需求。那么下面介绍,总结一下如何搜索、查找文件当中的内容。
搜索、查找文件当中的内容,一般最常用的是grep命令,另外还有egrep, vi命令也能搜索文件里面内容
find -name "文件名"
grep -H -r "被查找字符串" /路径 | cut -d: -f1
grep -H -r "ahrefUrlforWechat" /opt/nginx/ | cut -d: -f1
1:搜索某个文件里面是否包含字符串,使用grep "search content" filename1, 例如
grep ORA alert_gsp.log
grep "ORA" alert_gsp.log
例如我们需要搜索、查找utlspadv.sql文件中包含ORA的字符内容
grep "ORA" utlspadv.sql
如上所示,这个是一个模糊匹配,其实我是想要查看ORA这类错误,那么我要过滤掉哪一些没有用的,搜索的内容修改一下即可(当然也可以使用特殊参数,后面有讲述),如下所示。
grep "ORA-" utlspadv.sql
2: 如果你想搜索多个文件是否包含某个字符串,可以使用下面方式
grep "search content" filename1 filename2.... filenamen
grep "search content" *.sql
例如我想查看当前目录下,哪些sql脚本包含视图v$temp_space_header(注意:搜索的内容如果包含特殊字符时,必须进行转义处理,如下所示)
grep "v\$temp_space_header" *.sql
3:如果需要显示搜索文本在文件中的行数,可以使用参数-n
grep -n "v\$temp_space_header" *.sql
4: 如果搜索时需要忽略大小写问题,可以使用参数-i
grep "V\$TEMP_SPACE_HEADER" *.sql
grep -i "V\$TEMP_SPACE_HEADER" *.sql
另外,例如检查安装的MySQL组件
rpm -qa | grep -i mysql
5:从文件内容查找不匹配指定字符串的行:
grep –v "被查找的字符串" 文件名
例如查找某些进程时,我们不想显示包含命令grep ora_mmon的进程,如下所示
ps -ef | grep ora_mmon
ps -ef | grep ora_mmon | grep -v grep
6:搜索、查找匹配的行数:
grep -c "被查找的字符串" 文件名
grep "v\$temp_space_header" *.sql
grep -c "v\$temp_space_header" catspacd.sql
grep -c "v\$temp_space_header" catspace.sql
7:有些场景,我们并不知道文件类型、或那些文件包含有我们需要搜索的字符串,那么可以递归搜索某个目录以及子目录下的所有文件
grep -r "v\$temp_space_header" /u01/app/oracle/
8:如果我们只想获取那些文件包含搜索的内容,那么可以使用下命令
grep -H -r "v\$temp_space_header" /u01/app/oracle/ | cut -d: -f1
9:如果只想获取和整个搜索字符匹配的内容,那么可以使用参数w
你可以对比一下两者的区别
grep -w "ORA" utlspadv.sql
grep "ORA" utlspadv.sql
10: grep命令结合find命令搜索
find . -name '*.sql' -exec grep -i 'v\$temp_space_header' {} \; -print
11: egrep -w -R 'word1|word2' ~/klbtmp
12: vi命令其实也能搜索文件里面的内容,只不过没有grep命令功能那么方便、强大。
1:搜索某个文件里面是否包含字符串,使用grep "search content" filename1, 例如
$ grep ORA alert_gsp.log
$ grep "ORA" alert_gsp.log
<