GREP:不包括具有特定模式的文件名,而包括特定文件扩展名

时间:2020-10-08 01:31:57

标签: perl grep

我刚刚开始学习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的未编号文件名。谢谢。

3 个答案:

答案 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>
相关问题