Chinaunix
标题:
不好意思问个简单的问题,帮忙解答
[打印本页]
作者:
WinnerBoy
时间:
2015-07-05 10:12
标题:
不好意思问个简单的问题,帮忙解答
时间有点紧,没太多空看perl的书,不好意思,回头有空了我再自己研究,先请大侠们帮我写下。
很简单,就是一个目录下有很多这样的文件。
abc.tar, abc-20050101.tar, readme, ...
我就是想查询这个目录下的文件,返回那个abc-20050101.tar文件的文件名不带.tar(这种类型的文件只有这一个)
上边的例子就是返回 abc-20050101
多谢了!
作者:
substr函数
时间:
2015-07-05 20:51
abc.tar, 不返回 abc
abc-20050101.tar, 返回 abc-20050101
我想了好久也没想出来
话说为啥不不返回abc
作者:
flyingdancen
时间:
2015-07-05 22:44
本帖最后由 flyingdancen 于 2015-07-05 22:47 编辑
#比较老式的写法,一般用glob更方便
my $dir = "dir";
opendir DIR, "$dir" or die "$!";
while(my $file = readdir(DIR)) {
if($file =~ /abc.{1,}\.tar/) {
$file =~ s/\.tar//;
print "$file\n";
}
}
closedir DIR;
#glob 主要是我不是很熟悉,不知道能不能精确的匹配出来,以下可能错
my @file_arr = glob("$dir/abc-*.tar");
for my $file (@file_arr) {
$file =~ s/\.tar$//;
print "$file\n";
}
作者:
huyang_
时间:
2015-07-06 11:46
本帖最后由 huyang_ 于 2015-07-06 11:49 编辑
刚学perl,答案不知道对不对,楼主可以看下
如果文件abc-20050101.tar都是由"abc"+"-"+日期组成的话,我的思路如下(不是完整代码,文件操作部分需要楼主自己写,我仅仅写出了正则匹配的部分):
my @str = qw(abc.tar abc-20050101.tar);
foreach (@str)
{
print "$1:hello world\n" if(/(\w+(?!\.)-\d+)/);
}
找出文件之后,再用File::basename模块或者正则提取出你需要的部分
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2