Linux中如何递归地搜索文件中的关键字

爱站 2024-11-04 34 0条评论
55Link友情链接交易平台
摘要: 在Linux中,我们可以使用grep命令来搜索文件中的关键字。需要递归搜索整个目录中的文件,可以使用命令。例如,要在当前目录及其子目录中搜索包含单词Linux的文件,可以使用以下命...

在 Linux 中,我们可以使用 grep 命令来搜索文件中的关键字。需要递归搜索整个目录中的文件,可以使用命令。例如,要在当前目录及其子目录中搜索包含单词"Linux"的文件,可以使用以下命令:

grep -r "Linux" .

这个命令会遍历当前目录及其子目录,并输出包含关键字"Linux"的所有文件。您还可以使用通配符来搜索特定类型的文件,例如 grep -r "keyword" *.txt 将搜索当前目录及其子目录中所有的 .txt 文件。

另一个常用的文件搜索工具是 locate 命令。该命令使用预建的文件索引数据库来快速查找文件,而不需要遍历整个文件系统。要使用 locate 命令搜索文件中的关键字,可以使用以下命令:

locate -i "keyword"

其中参数可以忽略大小写。locate 命令通常比 grep 命令快,但它搜索的是文件名,而不是文件内容。您需要搜索文件内容,还是应该使用 grep 命令。


如何在Linux系统查找某文件夹中含有关键字的文件

用grep命令,一般用法:

linux查找文件内容命令

搜索、查找文件当中的内容,一般最常用的是grep命令,另外还有egrep, vi命令也能搜索文件里面内容

1:搜索某个文件里面是否包含字符串,使用grep search content filename1, 例如

$ grep ORA alert_

$ grep ORA alert_

例如我们需要搜索、查找文件中包含ORA的字符内容

[oracle@DB-Server admin]$ grep ORA -- ORA-XXXXX: Monitoring already started. If for example you want-- ORA-:-- ORA-:-- ORA-: no active monitoring job found-- ORA-: no active monitoring job found-- 0 |<PS> => 0 0 2 99.3% 0% 0.7% -- |<PR> => 100% 0% 0% |<PR> ...-- => 92 7 99.3% 0% 0.7% |<PR> ...-- |<C> CAPTURE_USER1=> 2 0 0 0.E+00-- |<C> CAPTURE_USER1=>-- ORA-:-- ORA-:-- ORA-:-- ORA-: no active monitoring job found-- ORA-: no active monitoring job found[oracle@DB-Server admin]$

如上所示,这个是一个模糊匹配,其实我是想要查看ORA这类错误,那么我要过滤掉哪一些没有用的,搜索的内容修改一下即可(当然也可以使用特殊参数,后面有讲述),如下所示。

[oracle@DB-Server admin]$ grep ORA- -- ORA-XXXXX: Monitoring already started. If for example you want-- ORA-:-- ORA-:-- ORA-: no active monitoring job found-- ORA-: no active monitoring job found-- ORA-:-- ORA-:-- ORA-:-- ORA-: no active monitoring job found-- ORA-: no active monitoring job found[oracle@DB-Server admin]$

2: 如果你想搜索多个文件是否包含某个字符串,可以使用下面方式

grep search content filename1 filename2.... filenamen

grep search content *

例如我想查看当前目录下,哪些sql脚本包含视图v$temp_space_header(注意:搜索的内容如果包含特殊字符时,必须进行转义处理,如下所示)

[oracle@DB-Server admin]$ grep v\$temp_space_header *:drop public synonym v$temp_space_header;:drop public synonym gv$temp_space_header;:create or replace view v_$temp_space_header as select * from v$temp_space_header;:create or replace public synonym v$temp_space_header for v_$temp_space_header;:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;:create or replace public synonym gv$temp_space_: FROM gv$temp_space_header[oracle@DB-Server admin]$

3:如果需要显示搜索文本在文件中的行数,可以使用参数-n

[oracle@DB-Server admin]$ grep -n v\$temp_space_header *:68:drop public synonym v$temp_space_header;:71:drop public synonym gv$temp_space_header;:1952:create or replace view v_$temp_space_header as select * from v$temp_space_header;:1953:create or replace public synonym v$temp_space_header for v_$temp_space_header;:1956:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;:1957:create or replace public synonym gv$temp_space_:2357: FROM gv$temp_space_header[oracle@DB-Server admin]$

4: 如果搜索时需要忽略大小写问题,可以使用参数-i

[oracle@DB-Server admin]$ grep V\$TEMP_SPACE_HEADER *[oracle@DB-Server admin]$ grep -i V\$TEMP_SPACE_HEADER *:drop public synonym v$temp_space_header;:drop public synonym gv$temp_space_header;:create or replace view v_$temp_space_header as select * from v$temp_space_header;:create or replace public synonym v$temp_space_header for v_$temp_space_header;:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;:create or replace public synonym gv$temp_space_: FROM gv$temp_space_header[oracle@DB-Server admin]$

另外,例如检查安装的MySQL组件

[root@DB-Server init.d]# rpm -qa | grep -i ___glibc2.5

5:从文件内容查找不匹配指定字符串的行:

$ grep –v 被查找的字符串 文件名

例如查找某些进程时,我们不想显示包含命令grep ora_mmon的进程,如下所示

[oracle@DB-Server admin]$ ps -ef | grep ora_mmon oracle 0 00:09 pts/1 00:00:00 grep ora_mmonoracle 1 0 Aug22 ? 00:00:07 ora_mmon_gsp[oracle@DB-Server admin]$ ps -ef | grep ora_mmon | grep -v greporacle 1 0 Aug22 ? 00:00:07 ora_mmon_gsp[oracle@DB-Server admin]$

6:搜索、查找匹配的行数:

$ grep -c 被查找的字符串 文件名

[oracle@DB-Server admin]$ [oracle@DB-Server admin]$ grep v\$temp_space_header *:drop public synonym v$temp_space_header;:drop public synonym gv$temp_space_header;:create or replace view v_$temp_space_header as select * from v$temp_space_header;:create or replace public synonym v$temp_space_header for v_$temp_space_header;:create or replace view gv_$temp_space_header as select * from gv$temp_space_header;:create or replace public synonym gv$temp_space_: FROM gv$temp_space_header[oracle@DB-Server admin]$ grep -c v\$temp_space_header 2[oracle@DB-Server admin]$ grep -c v\$temp_space_header 5[oracle@DB-Server admin]$

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/: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/: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/: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/:create or replace public synonym gv$temp_space_header

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/: FROM gv$temp_space_header

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/:drop public synonym v$temp_space_header;

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/: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/

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/

[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/

/u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/

[oracle@DB-Server ~]$

9:如果只想获取和整个搜索字符匹配的内容,那么可以使用参数w

你可以对比一下两者的区别

[oracle@DB-Server admin]$ grep -w ORA -- ORA-XXXXX: Monitoring already started. If for example you want-- ORA-:-- ORA-:-- ORA-: no active monitoring job found-- ORA-: no active monitoring job found-- ORA-:-- ORA-:-- ORA-:-- ORA-: no active monitoring job found-- ORA-: no active monitoring job found[oracle@DB-Server admin]$ grep ORA -- ORA-XXXXX: Monitoring already started. If for example you want-- ORA-:-- ORA-:-- ORA-: no active monitoring job found-- ORA-: no active monitoring job found-- 0 |<PS> => 0 0 2 99.3% 0% 0.7% -- |<PR> => 100% 0% 0% |<PR> ...-- => 92 7 99.3% 0% 0.7% |<PR> ...-- |<C> CAPTURE_USER1=> 2 0 0 0.E+00-- |<C> CAPTURE_USER1=>-- ORA-:-- ORA-:-- ORA-:-- ORA-: no active monitoring job found-- ORA-: no active monitoring job found[oracle@DB-Server admin]$

10: grep命令结合find命令搜索

[oracle@DB-Server admin]$ find . -name * -exec grep -i v\$temp_space_header {} \; -printcreate or replace view v_$temp_space_header as select * from v$temp_space_header;create or replace public synonym v$temp_space_header for v_$temp_space_header;create or replace view gv_$temp_space_header as select * from gv$temp_space_header;create or replace public synonym gv$temp_space_headerFROM gv$temp_space_header./ public synonym v$temp_space_header;drop public synonym gv$temp_space_header;./[oracle@DB-Server admin]$

11: egrep -w -R word1|word2 ~/klbtmp

12: vi命令其实也能搜索文件里面的内容,只不过没有grep命令功能那么方便、强大。

Linux下Grep命令的详细使用方法?

在linux中grep命令是非常有用的,它和管道(|)配合使用,非常强大,用于搜索文本文件.如果想要在几个文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。 假设您正在‘/usr/src/linux/Documentation’目录下搜索带字符串‘magic’的文件: $ grep magic /usr/src/linux/Documentation/* :* How do I enable the magic SysRQ key? :* How do I use the magic SysRQ key? 其中文件‘’包含该字符串,讨论的是 SysRQ 的功能。 默认情况下,‘grep’只搜索当前目录。如果此目录下有许多子目录,‘grep’会以如下形式列出: grep: sound: Is a directory 这可能会使‘grep’的输出难于阅读。这里有两种解决的办法: 明确要求搜索子目录:grep -r 或忽略子目录:grep -d skip 当然,如果预料到有许多输出,您可以通过 管道 将其转到‘less’上阅读: $ grep magic /usr/src/linux/Documentation/* | less 这样,您就可以更方便地阅读。 有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,‘grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 ,然后再试。 下面是一些有意思的命令行参数: grep -i pattern files :不区分大小写地搜索。默认情况区分大小写, grep -l pattern files :只列出匹配的文件名, grep -L pattern files :列出不匹配的文件名, grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’), grep -C number pattern files :匹配的上下文分别显示[number]行, grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行, grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。 这里还有些用于搜索的特殊符号: \< 和 \> 分别标注单词的开始与结尾。 例如: grep man * 会匹配 ‘Batman’、‘manic’、‘man’等, grep \ grep \ 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。 ^:指匹配的字符串在行首, $:指匹配的字符串在行尾, 如果您不习惯命令行参数,可以试试图形界面的‘grep’,如 reXgrep 。 这个软件提供 AND、OR、NOT 等语法,还有漂亮的按钮 :-) 。 如果您只是需要更清楚的输出,不妨试试 fungrep 。

文章版权及转载声明:

作者:爱站本文地址:https://www.awz.cc/post/4819.html发布于 2024-11-04
文章转载或复制请以超链接形式并注明出处爱网站

赞(0