您的位置 首页 php

Linux根据文件内容的中某关键字找到对应文件的10大实用案例

1. 前言

有时间我们需要查找文件,并不是根据文件名查找文件,而是查看每个文件里的内容是否包括某些关键字,然后把带有特定关键字内容的文件找出来。本文列举出常用的使用命令和案例,希望能给读者一些帮助。

2. Linux 根据关键字查找文件内容的实用案例

Linux根据关键字查找文件内容的实用案例

在linux下如果要查找包含某个关键字的文件,如要在/root/目录下搜索带有关键字“zcwyou”的文件,在终端下运行命令:

[root@zcwyou ~]# find /root/ –type f |xargs grep “zcwyou”
 

在/root/目录下查找带有test关键字的文件

[root@zcwyou ~]# grep -r “test” /root/
 

查找当前目录及其子目录下所有php文件中包含某关键字的文件,假设关键字为:keyword

[root@zcwyou ~]# find -name ‘*.php’ |xargs  grep  -l ‘keyword’ 
 

在Linux的终端中,搜索当前目录和子目录中含有某关键字(假设关键字为zcwyou)的文件,命令如下:

[root@zcwyou ~]# grep ‘zcwyou’ ./ -Rn
 

查找目录/ var /www/html/test/里,包含带关键字linuxrumen.com的文件并删除这些文件

[root@zcwyou ~]# find /var/www/html/test/ -type f -exec grep “linuxrumen.com” {} \; -print -exec rm {} \;
 

查找当前目录下的所有文件中是否含有某个 字符串 ,假设关键字为zcwyou

[root@zcwyou ~]# find .|xargs grep -ri "zcwyou"
 

查找当前目录下的所有文件中是否含有某个字符串

查找当前目录下的所有文件中是否含有某个字符串(以关键字zcwyou为例),并且只打印出文件名

[root@zcwyou ~]# find .| xargs  grep -ri "zcwyou" -l
 

linux 查找某目录下包含关键字内容的文件

grep -r “{关键字}” {路径}

linux查找某目录下包含关键字内容的文件

例如:

在目录/zcwyou/test/里,找到带有关键字test文件

[root@zcwyou ~]# grep -r "test" /zcwyou/test/
 

3. Linux使用重定向和过滤管道组合更精准查找文件内容

linux使用重定向和过滤管道组合更精准查找文件内容

对find,xargs,grep和管道的一些深入理解

相信大家都知道在目录中搜索含有固定字符串文件的命令:

利用find命令查找当前目录下,后缀名为py的文件,在这些文件里,查找带有关键字test的内容

[root@zcwyou ~]# find . -name '*.py' |xargs grep test
 

如果我们把xargs删除,比如执行以下命令:

[root@zcwyou ~]# find . -name '*.py' |grep test
 

结果并不是自己所期望的。此命令只是找出文件名*.py有关键字test的情况,为何?

这里就需要大家熟悉xargs的工具,下面我们科普一下shell编程里的基础知识

3.1 参数与标准输入

这两个词我们在Linux命令中是很常见的。但是参数和标准输入其实是有区别的。我们日常使用的很多命令,例如ls -lah .中。l, a, h ,都是命令ls的参数。至于标准输入,可以说它某种流数据。而通常来讲标准输入的流数据来源就是我们的终端输入。在Linux命令中,有些命令可以接收标准输入,有些是不能的。像上面的ls,就是只能接收参数,不能接收标准输入。像cat命令或 echo 命令,这些是可以的。

怎么分辨一个命令可不可以接收标准输入?很简单,当你敲完命令回车后,终端会等待接收你的输入,例如当你在终端输入cat后,终端会等待你输入字符,当你输入一些字符后,然后按Ctrl-C发送终止符号。这时cat命令接收标准输入完毕,执行命令,也就是将刚才键入的内容输出的标准输出上(屏幕)。

3.2 管道

管道的作用是将前面命令的标准输出作为后面命令的标准输入。这里要注意,后面的命令接收的是标准输入,所以如果命令不支持接收标准输入,那么就不能直接使用管道,例如常用的ls命令,只能使用参数,而不能使用标准输入,所以[command] | ls是不能使用的。而命令如echo或cat就可以。那么肯定有方法来实现这些不能使用标准输入的命令与管道结合,这时候xargs便出场了。

3.3 xargs命令

xargs命令通俗来讲就是将标准输入转成各种格式化的参数,所以命令[command 1] | xargs [command 2]就是将command 1的标准输出结果,通过管道|变成xargs的标准输入,然后xargs再将此标准输入变成参数,传给[command 2]。这样一来,通过xargs命令,我们便可以在管道后面使用那些不接收标准输入的命令了。例如[command 1]|xargs ls,是不是很熟悉?

3.4 find与grep配合查找带有特定关键字文件内容

我们首先来查看grep手册。通过man grep命令。

grep searches the named input FILEs (or standard input if no files are named, or if a single hyphen-minus (-) is given as file name) for lines containing a match to the given PATTERN. By default, grep prints the matching lines

那么对于第一个命令find . -name ‘*.py’ |grep test,是将前面命令的标准输出作为标准输入传给了grep test,那么grep是从这些标准输入寻找test字符,也就是文件名组成的字符流, 最终选择出的是这些文件名。

对于第二个命令find . -name ‘*.py’ |xargs grep test,通过xargs,find得到的文件名成为了参数传给后面的grep,那么这时候这些文件名就是实实在在的文件标识,grep接收后会按正常的使用方式在各文件中搜寻字符串。

3.5 grep 参数

-a 不要忽略二进制数据。

-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。

-b 在显示符合范本样式的那一行之外,并显示该行之前的内容。

-c 计算符合范本样式的列数。

-C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。

-d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。

-e<范本样式> 指定字符串作为查找文件内容的范本样式。

-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。

-f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。

-F 将范本样式视为固定字符串的列表。

-G 将范本样式视为普通的表示法来使用。

-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。

-H 在显示符合范本样式的那一列之前,标示该列的文件名称。

-i 忽略字符大小写的差别。

-l 列出文件内容符合指定的范本样式的文件名称。

-L 列出文件内容不符合指定的范本样式的文件名称。

-n 在显示符合范本样式的那一列之前,标示出该列的编号。

-q 不显示任何信息。

-R/-r 此参数的效果和指定“-d recurse”参数相同。

-s 不显示错误信息。

-v 反转查找。

-w 只显示全字符合的列。

-x 只显示全列符合的列。

-y 此参数效果跟“-i”相同。

-o 只输出文件中匹配到的部分。

4. 总结

grep命令只能查找文本文件的内容,并不能查找二进制和其它类型文件的内容,这些非本文的文件也没有查看的意义和必要。常用的场景是使用grep命令查看某程序的配置文件,根据某参数作为查找关键字的目标。熟练掌握find和grep,将会极大提高文本处理效率。

本文已同步至博客站,尊重原创,转载时请在正文中附带以下链接:

点击了解更多,快速查看更多的技术文章列表。

文章来源:智云一二三科技

文章标题:Linux根据文件内容的中某关键字找到对应文件的10大实用案例

文章地址:https://www.zhihuclub.com/153544.shtml

关于作者: 智云科技

热门文章

网站地图