在Perl中提取和替换文件扩展名

时间:2012-08-01 16:12:59

标签: perl

在我开始之前,我想告诉你我不是Perl专家。我刚刚开始因为分配给我的一些特定任务。

此任务的要求是提取文件的扩展名(.dat)并将其替换为.trg。问题是我们正在压缩.dat文件以生成$filename.dat.gz,当我们提取扩展并替换它时,我们得到$filename.dat.trg,而我们希望理想情况下需要$filename.trg。< / p>

关于代码(请注意,这似乎是一个非常古老的'遗留'代码,我不想修改它太多,因为它是由另一个人维​​护),这就是它的方式被放下

#prepare the trigger file
#get the extension  
my @contains_extension = split (/\./ , $filename);
my $ext = $contains_extension[-1];

#replace with  a ".trg" extension
my $remote_trgfile = $filename;
$remote_trgfile =~ s/$ext$/trg/;
my $trgfile = $out;
$trgfile =~ s/$ext$/trg/;

请注意,上述代码中的$filename后缀为.dat.gz,即文件名为$filename.dat.gz

如果有人可以通过更简单的方式提取扩展程序(.dat.gz)并将其替换为.trg

,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

所以你想改变文件名的'扩展名',包括一个可选的.gz?尝试:

$filename =~ s{\.[^.]*(?:\.gz)?$}{.trg}

答案 1 :(得分:1)

尝试

$filename =~ s/\..*$/.trg/;

不需要做所有那些花哨的拆分来尝试捕获扩展名:)

击穿:

。火柴 。 。*匹配所有内容(换行除外) $匹配字符串的结尾

然后你只需用.trg

替换它

所以你基本上只是在第一个“。”之后拿走所有东西。并用.trg替换

希望有所帮助:)