免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2311 | 回复: 3
打印 上一主题 下一主题

不好意思问个简单的问题,帮忙解答 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-05 10:12 |只看该作者 |倒序浏览
时间有点紧,没太多空看perl的书,不好意思,回头有空了我再自己研究,先请大侠们帮我写下。

很简单,就是一个目录下有很多这样的文件。
abc.tar, abc-20050101.tar, readme, ...

我就是想查询这个目录下的文件,返回那个abc-20050101.tar文件的文件名不带.tar(这种类型的文件只有这一个)

上边的例子就是返回 abc-20050101


多谢了!

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
2 [报告]
发表于 2015-07-05 20:51 |只看该作者
abc.tar, 不返回 abc
abc-20050101.tar,  返回 abc-20050101

我想了好久也没想出来
话说为啥不不返回abc

论坛徽章:
0
3 [报告]
发表于 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";
}

论坛徽章:
0
4 [报告]
发表于 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模块或者正则提取出你需要的部分
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP