![如果 Perl 中的文件中存在特定的正则表达式,如何获取文件名](https://linux22.com/image/21162/%E5%A6%82%E6%9E%9C%20Perl%20%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%AD%E5%AD%98%E5%9C%A8%E7%89%B9%E5%AE%9A%E7%9A%84%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%EF%BC%8C%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E5%90%8D.png)
在包含许多文件的目录中,如果在文件中找到特定的正则表达式(或格式),我想获取该文件名
例子:
如果在名为 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,'';
}