Welcome 微信登录

首页 / 操作系统 / Linux / Linux如何搜索查找文件里面内容

在Linux系统当中,如何搜、索查找文件里面的内容呢? 这个应该是系统维护、管理当中遇到最常见的需求。那么下面介绍,总结一下如何搜索、查找文件当中的内容。搜索、查找文件当中的内容,一般最常用的是grep命令,另外还有egrep, vi命令也能搜索文件里面内容1:搜索某个文件里面是否包含字符串,使用grep "search content" filename1, 例如$ grep ORA alert_gsp.log$ grep "ORA" alert_gsp.log例如我们需要搜索、查找utlspadv.sql文件中包含ORA的字符内容[Oracle@DB-Server admin]$ grep "ORA" utlspadv.sql<!--CRLF-->  -- ORA-XXXXX:        Monitoring already started. If for example you want <!--CRLF-->  -- ORA-20111:<!--CRLF-->  -- ORA-20112:<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->  -- 0 |<PS> =>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 0 0 2 99.3% 0% 0.7% ""<!--CRLF-->  -- |<PR> DBS1.REGRESS.RDBMS.DEV.US.ORACLE.COM=> 100% 0% 0% "" |<PR> ...<!--CRLF-->  -- =>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 92 7 99.3% 0% 0.7% "" |<PR> ...<!--CRLF-->  -- |<C> CAPTURE_USER1=>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 2 0 0 0.E+00<!--CRLF-->  -- |<C> CAPTURE_USER1=>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM<!--CRLF-->  -- ORA-20111:<!--CRLF-->  -- ORA-20112:<!--CRLF-->  -- ORA-20100:<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->[oracle@DB-Server admin]$ <!--CRLF-->如上所示,这个是一个模糊匹配,其实我是想要查看ORA这类错误,那么我要过滤掉哪一些没有用的,搜索的内容修改一下即可(当然也可以使用特殊参数,后面有讲述),如下所示。[oracle@DB-Server admin]$ grep "ORA-" utlspadv.sql<!--CRLF-->  -- ORA-XXXXX:        Monitoring already started. If for example you want <!--CRLF-->  -- ORA-20111:<!--CRLF-->  -- ORA-20112:<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->  -- ORA-20111:<!--CRLF-->  -- ORA-20112:<!--CRLF-->  -- ORA-20100:<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->[oracle@DB-Server admin]$ <!--CRLF-->2: 如果你想搜索多个文件是否包含某个字符串,可以使用下面方式grep "search content" filename1 filename2.... filenamen grep "search content" *.sql例如我想查看当前目录下,哪些sql脚本包含视图v$temp_space_header(注意:搜索的内容如果包含特殊字符时,必须进行转义处理,如下所示)[oracle@DB-Server admin]$ grep "v$temp_space_header" *.sql<!--CRLF-->catspacd.sql:drop public synonym v$temp_space_header;<!--CRLF-->catspacd.sql:drop public synonym gv$temp_space_header;<!--CRLF-->catspace.sql:create or replace view v_$temp_space_header as select * from v$temp_space_header;<!--CRLF-->catspace.sql:create or replace public synonym v$temp_space_header for v_$temp_space_header;<!--CRLF-->catspace.sql:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;<!--CRLF-->catspace.sql:create or replace public synonym gv$temp_space_header<!--CRLF-->catspace.sql:            FROM gv$temp_space_header<!--CRLF-->[oracle@DB-Server admin]$ <!--CRLF-->3:如果需要显示搜索文本在文件中的行数,可以使用参数-n[oracle@DB-Server admin]$ grep  -n "v$temp_space_header" *.sql<!--CRLF-->catspacd.sql:68:drop public synonym v$temp_space_header;<!--CRLF-->catspacd.sql:71:drop public synonym gv$temp_space_header;<!--CRLF-->catspace.sql:1952:create or replace view v_$temp_space_header as select * from v$temp_space_header;<!--CRLF-->catspace.sql:1953:create or replace public synonym v$temp_space_header for v_$temp_space_header;<!--CRLF-->catspace.sql:1956:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;<!--CRLF-->catspace.sql:1957:create or replace public synonym gv$temp_space_header<!--CRLF-->catspace.sql:2357:            FROM gv$temp_space_header<!--CRLF-->[oracle@DB-Server admin]$ <!--CRLF-->4: 如果搜索时需要忽略大小写问题,可以使用参数-i <!--CRLF-->[oracle@DB-Server admin]$ grep  "V$TEMP_SPACE_HEADER" *.sql<!--CRLF-->[oracle@DB-Server admin]$ grep -i "V$TEMP_SPACE_HEADER"  *.sql<!--CRLF-->catspacd.sql:drop public synonym v$temp_space_header;<!--CRLF-->catspacd.sql:drop public synonym gv$temp_space_header;<!--CRLF-->catspace.sql:create or replace view v_$temp_space_header as select * from v$temp_space_header;<!--CRLF-->catspace.sql:create or replace public synonym v$temp_space_header for v_$temp_space_header;<!--CRLF-->catspace.sql:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;<!--CRLF-->catspace.sql:create or replace public synonym gv$temp_space_header<!--CRLF-->catspace.sql:            FROM gv$temp_space_header<!--CRLF-->[oracle@DB-Server admin]$ <!--CRLF-->另外,例如检查安装的MySQL组件[root@DB-Server init.d]# rpm -qa | grep -i mysql<!--CRLF--> <!--CRLF-->MySQL-devel-5.6.23-1.linux_glibc2.5<!--CRLF--> <!--CRLF-->MySQL-client-5.6.23-1.linux_glibc2.5<!--CRLF--> <!--CRLF-->MySQL-server-5.6.23-1.linux_glibc2.5<!--CRLF-->5:从文件内容查找不匹配指定字符串的行:$ grep –v "被查找的字符串" 文件名例如查找某些进程时,我们不想显示包含命令grep ora_mmon的进程,如下所示[oracle@DB-Server admin]$ ps -ef  | grep ora_mmon  <!--CRLF-->oracle 16675 16220  0 00:09 pts/1    00:00:00 grep ora_mmon<!--CRLF-->oracle 21412   1  0 Aug22 ?        00:00:07 ora_mmon_gsp<!--CRLF-->[oracle@DB-Server admin]$ ps -ef  | grep ora_mmon  | grep -v grep<!--CRLF-->oracle 21412   1  0 Aug22 ?        00:00:07 ora_mmon_gsp<!--CRLF-->[oracle@DB-Server admin]$ <!--CRLF-->6:搜索、查找匹配的行数:$ grep -c "被查找的字符串" 文件名[oracle@DB-Server admin]$ <!--CRLF-->[oracle@DB-Server admin]$ grep "v$temp_space_header" *.sql<!--CRLF-->catspacd.sql:drop public synonym v$temp_space_header;<!--CRLF-->catspacd.sql:drop public synonym gv$temp_space_header;<!--CRLF-->catspace.sql:create or replace view v_$temp_space_header as select * from v$temp_space_header;<!--CRLF-->catspace.sql:create or replace public synonym v$temp_space_header for v_$temp_space_header;<!--CRLF-->catspace.sql:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;<!--CRLF-->catspace.sql:create or replace public synonym gv$temp_space_header<!--CRLF-->catspace.sql:            FROM gv$temp_space_header<!--CRLF-->[oracle@DB-Server admin]$ grep -c  "v$temp_space_header"  catspacd.sql<!--CRLF-->2<!--CRLF-->[oracle@DB-Server admin]$ grep -c  "v$temp_space_header"  catspace.sql<!--CRLF-->5<!--CRLF-->[oracle@DB-Server admin]$ <!--CRLF-->7:有些场景,我们并不知道文件类型、或那些文件包含有我们需要搜索的字符串,那么可以递归搜索某个目录以及子目录下的所有文件[oracle@DB-Server ~]$ grep -r "v$temp_space_header" /u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin//u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql:create or replace view v_$temp_space_header as select * from v$temp_space_header;/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql:create or replace public synonym v$temp_space_header for v_$temp_space_header;/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql:create or replace public synonym gv$temp_space_header/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql: FROM gv$temp_space_header/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspacd.sql:drop public synonym v$temp_space_header;/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspacd.sql:drop public synonym gv$temp_space_header;[oracle@DB-Server ~]$ 8:如果我们只想获取那些文件包含搜索的内容,那么可以使用下命令[oracle@DB-Server ~]$ grep -H -r "v$temp_space_header" /u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/ | cut -d: -f1 /u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspacd.sql/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspacd.sql[oracle@DB-Server ~]$ grep -H -r "v$temp_space_header" /u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/ | cut -d: -f1 | uniq/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspace.sql/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/catspacd.sql[oracle@DB-Server ~]$ 9:如果只想获取和整个搜索字符匹配的内容,那么可以使用参数w你可以对比一下两者的区别[oracle@DB-Server admin]$ grep -w "ORA" utlspadv.sql<!--CRLF-->  -- ORA-XXXXX:        Monitoring already started. If for example you want <!--CRLF-->  -- ORA-20111:<!--CRLF-->  -- ORA-20112:<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->  -- ORA-20111:<!--CRLF-->  -- ORA-20112:<!--CRLF-->  -- ORA-20100:<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->[oracle@DB-Server admin]$ grep  "ORA" utlspadv.sql<!--CRLF-->  -- ORA-XXXXX:        Monitoring already started. If for example you want <!--CRLF-->  -- ORA-20111:<!--CRLF-->  -- ORA-20112:<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->  -- 0 |<PS> =>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 0 0 2 99.3% 0% 0.7% ""<!--CRLF-->  -- |<PR> DBS1.REGRESS.RDBMS.DEV.US.ORACLE.COM=> 100% 0% 0% "" |<PR> ...<!--CRLF-->  -- =>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 92 7 99.3% 0% 0.7% "" |<PR> ...<!--CRLF-->  -- |<C> CAPTURE_USER1=>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM 2 0 0 0.E+00<!--CRLF-->  -- |<C> CAPTURE_USER1=>DBS2.REGRESS.RDBMS.DEV.US.ORACLE.COM<!--CRLF-->  -- ORA-20111:<!--CRLF-->  -- ORA-20112:<!--CRLF-->  -- ORA-20100:<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->  -- ORA-20113: "no active monitoring job found"<!--CRLF-->[oracle@DB-Server admin]$ <!--CRLF-->10: grep命令结合find命令搜索[oracle@DB-Server admin]$ find . -name "*.sql" -exec grep -i "v$temp_space_header" {} ; -print<!--CRLF-->create or replace view v_$temp_space_header as select * from v$temp_space_header;<!--CRLF-->create or replace public synonym v$temp_space_header for v_$temp_space_header;<!--CRLF-->create or replace view gv_$temp_space_header as select * from gv$temp_space_header;<!--CRLF-->create or replace public synonym gv$temp_space_header<!--CRLF-->            FROM gv$temp_space_header<!--CRLF-->./catspace.sql<!--CRLF-->drop public synonym v$temp_space_header;<!--CRLF-->drop public synonym gv$temp_space_header;<!--CRLF-->./catspacd.sql<!--CRLF-->[oracle@DB-Server admin]$ <!--CRLF-->11: egrep -w -R "word1|word2" ~/klbtmp 12: vi命令其实也能搜索文件里面的内容,只不过没有grep命令功能那么方便、强大。grep使用简明及正则表达式  http://www.linuxidc.com/Linux/2013-08/88534.htm Linux下Shell编程——grep命令的基本运用 http://www.linuxidc.com/Linux/2013-06/85525.htm grep 命令详解及相关事例 http://www.linuxidc.com/Linux/2014-07/104041.htm Linux基础命令之grep详解 http://www.linuxidc.com/Linux/2013-07/87919.htm 设置grep高亮显示匹配项 http://www.linuxidc.com/Linux/2014-09/106871.htm Linux grep命令学习与总结 http://www.linuxidc.com/Linux/2014-10/108112.htm 14 个 grep 命令的例子 http://www.linuxidc.com/Linux/2015-05/117626.htm 本文永久更新链接地址