我想将unix正则表达式转换为Perl语言,以获得与某些条件相关的特定文件。
假设现在我在目录/nfs/cs/test_case/y2016
中有Perl脚本调用totalResult.pl,这个目录也包含很多目录,例如testWeek1,testWeek2,testWeek3 ......等。每个目录都包含子目录,如testCase1,testCase2,testCase3等。每个testCase目录包含一个文件调用.test_result,包含记录结果成功或失败。
所以我可以使用unix命令获取文件信息,例如:
wc /nfs/cs/test_case/y2016/testWeek1/testCase1/.test_result
如果想要获取每个失败的目录和子目录的test_results,我可以从unix中的当前路径/nfs/cs/test_case/y2016
执行此操作,如:
grep -ri "fail" */*/.test_result
它会给我输出:
/nfs/cs/test_case/y2016/testWeek1/testCase1/.test_result:fail
/nfs/cs/test_case/y2016/testWeek3/testCase45/.test_result:fail
/nfs/cs/test_case/y2016/testWeek4/testCase12/.test_result:fail
.
.
...etc
如何在编写Perl脚本时实现它只需运行命令perl testCase.pl
然后可以得到相同的输出?我是unix和Perl的新手,任何人都可以提供帮助吗?
答案 0 :(得分:3)
# Collect names of all test files
my @TestFiles = glob('/nfs/cs/test_case/y2016/*/*/.test_result');
# Check test files for "fail"
foreach my $TestFile ( @TestFiles ) {
open(my $T,'<',$TestFile) or die "Can't open < $TestFile: $!";
while(<$T>){
if( /fail/ ) {
chomp;
print $TestFile,":",$_,"\n";
}
}
close($T);
}
答案 1 :(得分:0)
您也可以使用back tick(`)运算符在Perl中执行相同的linux命令。
@ result =`grep -ri“fail”* / * /.test_result`;
print @result;