我在Perl中有一段代码可以grep提取目录下具有特定名称的文件。
push @{ $output{archives} }, grep {-f $_} "$output{dir}/result0.txt”, "$output{dir}/outcome.txt”;
say "@{ $output{archives} } \n";
这将在目录result0.txt
下搜索名称为outcome.txt
,$output{dir}
的文件。这些结果将被推入数组$output{archives}
。
如何搜索模式outcome_0.txt
,outcome_1.txt
,outcome_2.txt
等的文件名并推送到数组。
我尝试将"$output{dir}/outcome.txt”
更改为"$output{dir}/outcome*.txt”
,但完全没有任何结果。
答案 0 :(得分:2)
如果要查找与outcome_*.txt
匹配的文件,则可以使用glob
函数或aka <>
:
push @{ $output{archives} }, grep {-f $_} <"$output{dir}/outcome_*.txt">;
或使用glob
代替<>
:
push @{ $output{archives} }, grep {-f $_} glob "$output{dir}/outcome_*.txt";
或使用更具体的正则表达式:
push @{ $output{archives} }, grep {(-f $_) && /outcome_\d+\.txt$/} glob "$output{dir}/*";
来自perldoc glob:
全局
在列表上下文中,返回文件名列表(可能为空) 扩展EXPR的价值,例如标准Unix shell / bin / csh可以。在标量上下文中,全局遍历 文件名扩展,列表用完后返回undef。
有关更多信息,请参见perldoc glob和perldoc perlop。