免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2320 | 回复: 7
打印 上一主题 下一主题

求助--使用grep的查找文件出处 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-31 13:57 |只看该作者 |倒序浏览
本帖最后由 justagain 于 2011-03-31 14:10 编辑

学习了grep之后,我有个想法,但是无法通过命令实现,请大家帮我看一看,谢谢先。

在一个文件目录下有多个文件,其中有的内容包含关键词,例如FAILED,所以想用命令列出所有包含FAILED的行以及文件出处。

more /<directory path>/*.* | grep 'FAILED'  
#这个命令执行结果只可以显示出所有文件目录下包含关键词FAILED的行,但是无法列出显示行出自具体哪个文件。

more /<directory path>/*.* | grep -l 'FAILED'  
#这个命令执行结果失败,报错
<stdin>
Broken Pipe

请问我是不是哪里出错了?
如果有其他方法能否告知? 谢谢。

论坛徽章:
0
2 [报告]
发表于 2011-03-31 14:11 |只看该作者
-H就可以顯示文件名了
看標題 還以為是 perl 的那個grep呢

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
3 [报告]
发表于 2011-03-31 14:12 |只看该作者
grep 的不会,
可以试试awk: awk '/FAILED/{print $0,FILENAME}' files

论坛徽章:
0
4 [报告]
发表于 2011-03-31 14:16 |只看该作者
学习了grep之后,我有个想法,但是无法通过命令实现,请大家帮我看一看,谢谢先。

在一个文件目录下有多 ...
justagain 发表于 2011-03-31 13:57



grep 的输入是管道重定向过来的,它也不知来自哪个文件,所以打印出来了stdin

论坛徽章:
0
5 [报告]
发表于 2011-03-31 14:17 |只看该作者
实际上我想过,直接在目标目录下运行

grep -l 'FAILED' *
就可以得到所有包含FAILED的文件名,但是,这样又无法知道这个文件里面具体有哪几行是有关键词的。

初衷是为了一个命令实现如下结果
xxxxFAILEDxxxx    出自 XXX文件
xxxxFAILEDxxxx    出自 XXX文件
……

就是一个界面里面显示行的内容和文件来源

不知道是否可能实现。

论坛徽章:
0
6 [报告]
发表于 2011-03-31 14:34 |只看该作者
实际上我想过,直接在目标目录下运行

grep -l 'FAILED' *
就可以得到所有包含FAILED的文件名,但是,这 ...
justagain 发表于 2011-03-31 14:17


mygrep.pl
  1. #!/usr/bin/perl -w
  2. use strict;

  3. die "no arguments!\n" unless @ARGV;
  4. my $keywords="FAILED";
  5. foreach(@ARGV)
  6. {
  7.     my $filename=$_;
  8.     open FH,$_;
  9.     my $line=0;
  10.     while(<FH>)
  11.     {
  12.         chomp;
  13.         $line++;
  14.         while(/$keywords/g)
  15.         {
  16.             print "<$_> in file:<$filename> line:<$line>\n";
  17.         }
  18.     }
  19. }
复制代码
./mygrep.pl *

论坛徽章:
0
7 [报告]
发表于 2011-03-31 14:40 |只看该作者
  1. #!usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use File::Find;


  5. sub wanted
  6. {
  7.         my $file = $_;
  8.         open FH,"<", $file or die $!;
  9.         while (<FH>)
  10.         {
  11.                 if (/FAILED/)
  12.                 {
  13.                         print $_,"\t",$File::Find::name,"\n";
  14.                 }
  15.         }
  16. }

  17. find(\&wanted, qw[directory path]);
复制代码

论坛徽章:
0
8 [报告]
发表于 2011-03-31 15:42 |只看该作者
谢谢大家,我先学习一下再看。 谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP