linux grep查找多个文件的关键字 grep查询多个文件

   日期:2024-12-26     作者:caijiyuan      
核心提示:1. 前言有时间我们需要查找文件,并不是根据文件名查找文件,而是查看每个文件里的内容是否包括某些关键字,然后把带有特定关键


1. 前言

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

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


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

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

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

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

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

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

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


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

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

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

grep -r "{关键字}" {路径}


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

例如:

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

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


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

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

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

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

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

结果并不是自己所期望的。此命令只是找出文件名*.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. 总结

     本文地址:http://w.yusign.com/tjnews/2240.html    述古往 http://w.yusign.com/static/ , 查看更多
 
特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

举报收藏 0打赏 0
 
更多>同类生活信息

相关文章
最新文章
推荐文章
推荐图文
生活信息
点击排行
{
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  版权声明  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号