如何从perl中带有附加字符的变量中提取路径

时间:2013-03-05 15:49:39

标签: regex perl

我正在尝试从变量

中提取/temp/bin/usr/
$path  = /temp/bin/usr/... 

使用perl。 有人可以帮我吗?

3 个答案:

答案 0 :(得分:3)

使用File::Basename。它是Perl版本5中的核心模块。来自the documentation

use File::Basename;

($name,$path,$suffix) = fileparse($fullname, @suffixlist);
$name = fileparse($fullname, @suffixlist);

$basename = basename($fullname, @suffixlist);
$dirname  = dirname($fullname);

听起来dirname($path)就像你追求的那样。

您也可以简单地使用正则表达式

$path =~ s/\.+$//;

答案 1 :(得分:1)

要提取路径的一部分(例如,前三个目录),一种方法是使用模块splitdir的方法File::Spec,如:

printf "%s\n", join q|/|, (File::Spec->splitdir( $path ))[0..3];

如果要删除这些点,请在最后一次斜杠后使用与它们匹配的正则表达式,例如:

$path =~ s|(/)\.+\s*$|$1|;

答案 2 :(得分:1)

如果您只需要删除那些'..',那么有很多方法。

例如:

1)

my $str="/temp/bin/usr/..."; 
($str) =~ s/\.+$//; 
print $str;

2)

my $str="/temp/bin/usr/..."; 
$str = substr($str, 0, index($str, "."));
print $str;

3)

my $str="/temp/bin/usr/..."; 
$str = (split /\./, $str)[0];
print $str;

还有更多!