+ -
当前位置:首页 → 问答吧 → 求助--使用grep的查找文件出处

求助--使用grep的查找文件出处

时间:2011-03-31

来源:互联网

本帖最后由 justagain 于 2011-03-31 14:10 编辑

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

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

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

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

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

作者: justagain   发布时间: 2011-03-31

-H就可以顯示文件名了
看標題 還以為是 perl 的那個grep呢

作者: lkk2003rty   发布时间: 2011-03-31

grep 的不会,
可以试试awk: awk '/FAILED/{print $0,FILENAME}' files

作者: yinyuemi   发布时间: 2011-03-31



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

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




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

作者: xfoucs   发布时间: 2011-03-31

实际上我想过,直接在目标目录下运行

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

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

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

不知道是否可能实现。

作者: justagain   发布时间: 2011-03-31



QUOTE:
实际上我想过,直接在目标目录下运行

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 *

作者: xfoucs   发布时间: 2011-03-31

  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]);
复制代码

作者: Cu_fans   发布时间: 2011-03-31

谢谢大家,我先学习一下再看。 谢谢

作者: justagain   发布时间: 2011-03-31