我刚刚开始学习Perl,并且在使用 grep 功能时遇到了困难。具体来说,我想排除名称中带有数字0-9的文件名,但仅输出扩展名为.png的文件。我已经弄清楚了如何用数字排除文件名,但是我需要如何仅包括扩展名为.png的文件的帮助。
这是我的Perl脚本:
#!/usr/bin/perl
my $dir = '/Users/jdm/Desktop/xampp/htdocs/cnc/images/plants';
opendir(DIR, $dir);
@files = grep (!/[1-9]/,readdir(DIR));
closedir(DIR);
foreach $file (@files) {
print "$file\n";
}
这是输出:
Packera_glabellus.png
Leucojum_aestivum.png
Reynoutria_japonica.png
Agalinis_purpurea.png
.DS_Store
如您所见,“。DS_Store”没有扩展名.png。请建议一个 grep 表达式,该表达式仅输出未扩展名为.png的未编号文件名。谢谢。
答案 0 :(得分:1)
请尝试:
@files = grep {!/[0-9]/ && /\.png\z/i} readdir(DIR);
这匹配名称中没有数字的png文件,/i
允许扩展名大小写(大写或小写)。
答案 1 :(得分:1)
如果要排除名称中带有任何数字的文件,请将grep
行修改为:
@files = grep (/^\D*\.png\z/,readdir(DIR));
这只会返回以任何(或零个)非数字字符开头并以.png
结尾的文件名。
如果要排除名称中仅包含1-9的文件,请更改正则表达式:
@files = grep (/^[^1-9]*\.png\z/,readdir(DIR));
答案 2 :(得分:1)
也许glob可以帮助您完成任务
GoogleApi<o>