e****e 发帖数: 877 | 1 我有一个input变量:
/nfs/sc/proj/jkt/jkt088/jmeng/jkt/FRZ1/rcbgfctls_frz1_ww43.3
我需要输出:
$A = /nfs/sc/proj/jkt/jkt088/jmeng/jkt/FRZ1
$B = rcbgfctls
把这个path从最后一个"/"分开,前面的东西给$A。
最后的字符串从第一个"_"分开,我只要第一个r开头的部分给$B。
前面的path可能有很多个"/",后面的东西也可能有很多的"_"
怎么写一个小perl? |
d*****d 发帖数: 2449 | 2 不太会perl,但你的要求用regular expression很好解决,因为它是贪婪的,所以
^.*/ will match the $A you wanted (i.e. find the last ‘/')
so use "s/\(.*\)\/.*/\1/" will get $A
use "s/.*\/\(.*\)/\1/" will give you the rest part.
and for the rest part, simply use "s/_.*//" to replace everything behind '_'
to empty.
【在 e****e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我有一个input变量: : /nfs/sc/proj/jkt/jkt088/jmeng/jkt/FRZ1/rcbgfctls_frz1_ww43.3 : 我需要输出: : $A = /nfs/sc/proj/jkt/jkt088/jmeng/jkt/FRZ1 : $B = rcbgfctls : 把这个path从最后一个"/"分开,前面的东西给$A。 : 最后的字符串从第一个"_"分开,我只要第一个r开头的部分给$B。 : 前面的path可能有很多个"/",后面的东西也可能有很多的"_" : 怎么写一个小perl?
|
f***o 发帖数: 92 | 3 #!/usr/bin/perl
use File::Basename;
my $filename = "/nfs/sc/proj/jkt/jkt088/jmeng/jkt/FRZ1/rcbgfctls_frz1_ww43.3
";
print dirname($filename) . "\n";
split(/_/, basename($filename));
print $_[0] . "\n";
【在 e****e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我有一个input变量: : /nfs/sc/proj/jkt/jkt088/jmeng/jkt/FRZ1/rcbgfctls_frz1_ww43.3 : 我需要输出: : $A = /nfs/sc/proj/jkt/jkt088/jmeng/jkt/FRZ1 : $B = rcbgfctls : 把这个path从最后一个"/"分开,前面的东西给$A。 : 最后的字符串从第一个"_"分开,我只要第一个r开头的部分给$B。 : 前面的path可能有很多个"/",后面的东西也可能有很多的"_" : 怎么写一个小perl?
|
e****e 发帖数: 877 | 4 it works.
thanks.
I need to google this to understand what functions you used here.
.3
【在 f***o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : #!/usr/bin/perl : : : use File::Basename; : : : my $filename = "/nfs/sc/proj/jkt/jkt088/jmeng/jkt/FRZ1/rcbgfctls_frz1_ww43.3 : "; : :
|
e****e 发帖数: 877 | 5 你这个pattern match也蛮cool的,我就是不知道如何match到最后一个slash.
_'
【在 d*****d 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 不太会perl,但你的要求用regular expression很好解决,因为它是贪婪的,所以 : ^.*/ will match the $A you wanted (i.e. find the last ‘/') : so use "s/\(.*\)\/.*/\1/" will get $A : use "s/.*\/\(.*\)/\1/" will give you the rest part. : and for the rest part, simply use "s/_.*//" to replace everything behind '_' : to empty.
|
u****u 发帖数: 2308 | 6 try this:
if ($input =~ /(.*)\/([^_]*)/) {
$A = $1;
$B = $2;
}
【在 e****e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我有一个input变量: : /nfs/sc/proj/jkt/jkt088/jmeng/jkt/FRZ1/rcbgfctls_frz1_ww43.3 : 我需要输出: : $A = /nfs/sc/proj/jkt/jkt088/jmeng/jkt/FRZ1 : $B = rcbgfctls : 把这个path从最后一个"/"分开,前面的东西给$A。 : 最后的字符串从第一个"_"分开,我只要第一个r开头的部分给$B。 : 前面的path可能有很多个"/",后面的东西也可能有很多的"_" : 怎么写一个小perl?
|
e****e 发帖数: 877 | 7 多谢了,这个简单好用
【在 u****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : try this: : if ($input =~ /(.*)\/([^_]*)/) { : $A = $1; : $B = $2; : }
|