2011-04-09 26 views
0

我被困在试图找出perl正则表达式来提取以下值:(/ home/mail/dump dirs将始终是相同的)。谢谢。帮助使用perl正则表达式解析值

abc

123456

这是输出:

drwxr-xr-x - mail_hd mail_users   0 2011-03-26 20:12 /home/mail/dump/abc 
drwxr-xr-x - mail_hd mail_users   0 2011-04-15 09:10 /home/mail/dump/123456 

回答

1

这类似于this.

拆分的 “/”,并获得了最后一个项目

awk -F"/" '{print $NF}' file 

红宝石(1.9+ )(与Perl类似)

$ ruby -ne 'print $_.sub(/.*\//,"")' file 
abc 
123456 

$ ruby -F"/" -ane 'print $F[-1]' file 
abc 
123456 
+0

由于OP要求Perl,'perl -F/-lane'print $ F [-1]'文件' – ikegami 2011-04-09 05:22:40

+0

@ikegami。你应该提供这个答案。 – kurumi 2011-04-09 05:51:46

+0

这真的是你的。只需编辑它即可。 – ikegami 2011-04-09 06:21:38

2

也许使用splitbasename,来代替。

+1

'使用文件::基名QW(基名); basename((split('',$ _,8))[ - 1])' – ikegami 2011-04-09 05:24:38

0

也许这是有用的,应该返回你所需要的。

if ($subject =~ m!/home/mail/dump/(.*)$!) { 
    $result = $1; 
} else { 
    $result = ""; 
} 

/home/mail/dump/一切之后直到匹配行结束

1

以下perl正则表达式只给出最后一个正斜杠后面的字符。

s=.*/== 

实施例:

$ echo 'wxr-xr-x - mail_hd mail_users   0 2011-03-16 18:46 /home/mail/dump/abc' | perl -pe 's=.*/==' 
abc