如果 Perl 中的文件中存在特定的正则表达式,如何获取文件名

如果 Perl 中的文件中存在特定的正则表达式,如何获取文件名

在包含许多文件的目录中,如果在文件中找到特定的正则表达式(或格式),我想获取该文件名

例子:

  1. 如果在名为 ramayana 的文件中找到单词“rama”,则打印文件名“ramayana”

  2. 如果一个文件在名为 table 的文件名中包含类似“”的特定格式(TEXT - NUMBERS),则在 shell 中打印该文件名表,这非常简单,例如

    grep "mytext" * | cut -d':' -f1 | uniq

    但如何在 perl 中做到这一点

关于有用的 CPAN 模块的建议也值得赞赏。

答案1

也许我错过了一点,但如果你原来的要求与此基本相同:

grep -l "mytext" *

那么它的perl等价物可以写成:

perl -ne 'if(/mytext/){print"$ARGV\n";close ARGV}' *

笔记致读者:以下代码是根据版主意见更新的,与原问题不完全兼容。

#!/usr/bin/perl

@list_code=qw{ over 100 elements here };
@original=@ARGV;

foreach $ele (@list_code) {
  @ARGV=@original;
  @found=();
  while (<>) {
    if (/\Q$ele\E/) {
      push @found,$ARGV;
      close ARGV;
    }
  }
  print "$ele found in ",scalar @found," files : \n",join "\n",@found,'';
}

相关内容