在包含许多文件的目录中,如果在文件中找到特定的正则表达式(或格式),我想获取该文件名
例子:
如果在名为 ramayana 的文件中找到单词“rama”,则打印文件名“ramayana”
如果一个文件在名为 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,'';
}