Perl:在多个目录的一个特定文件中查找一个值

ef1yzkbh  于 2023-03-09  发布在  Perl
关注(0)|答案(1)|浏览(141)

我正在努力学习Perl,因为我们的大多数脚本都是用它编写的。我在完成AS的同时,分别用了一个学期的时间来处理Python和Java。如果我知道脚本的目标是什么,我在破译脚本方面相当流利,但我总是很难处理访问脚本位置之外的其他文件/目录。
我遇到了一个问题,这部分的脚本。我试图让它打开文件“attrlist”,并在该文件中找到一个字符串。该字符串将被发送到一个文本文件,但现在我只想得到的点,脚本打开每个文件,并找到字符串。
运行脚本时,我收到“gen_csh-10004-脚本已退出”错误。
我运行的是Perl 5.16.3。

foreach (@list){
    my $attrpath = "\/$_\/misc";
    # Verify that $attrpath is getting populated correctly.
    print "$attrpath\n";
    opendir(my $job,"\/genesis_data\/fw\/jobs$attrpath") or die "can't: $!";
    open (my $fh, '<', "attrlist") or die "couldn't open";
    my $panelsize = grep{!/^\va_panel_size = /}$fh;
}
yeotifhr

yeotifhr1#

如果我没理解错的话,你想要递归地找到所有名为'attrlist'的文件,并检查它们是否包含字符串'va_panel_size'。

use 5.10.0; # because of 'say'
use strict;
use warnings;
use File::Find::Rule;
use Path::Tiny;

my $target_name    = "attrlist";
my $string_to_find = "va_panel_size";

my @files_to_inspect = File::Find::Rule->name($target_name)->in('.');

foreach my $file (@files_to_inspect) {
  say "inspecting $file";
  my $content = path($file)->slurp;
  say $& while $content =~ /^.*?$string_to_find.*/gm;
}

相关问题