【发布时间】:2013-11-15 09:20:38
【问题描述】:
我正在尝试匹配具有
的行"/foldera/folderb/folderc/folderd/file.ext@@/main" + "/" + ANY_NUMBER:
例如:
(.+)(main)(.\d)
线条:
/foldera/folderb/folderc/folderd/file.ext@@/main
/foldera/folderb/folderc/folderd/file.ext@@/main/0
/foldera/folderb/folderc/folderd/file.ext@@/main/1
/foldera/folderb/folderc/folderd/file.ext@@/main/2
/foldera/folderb/folderc/folderd/file.ext@@/main/3
/foldera/folderb/folderc/folderd/file.ext@@/main/4
/foldera/folderb/folderc/folderd/file.ext@@/main/5 (RLT-abcde, BLD-abcde, DEV-abcde)
/foldera/folderb/folderc/folderx/file12.ext@@/main/0
/foldera/folderb/folderc/folderx/file12.ext@@/main/1
/foldera/folderb/folderc/folderx/file12.ext@@/main/2
/foldera/folderb/folderc/folderx/file12.ext@@/main/3
/foldera/folderb/folderc/folderx/file12.ext@@/main/4
/foldera/folderb/folderc/folderx/file12.ext@@/main/5
/foldera/folderb/folderc/folderx/file12.ext@@/main/6 (RLS-abcde-5.0, RLS-abcde-4.1)
虽然我的正则表达式匹配所需的行(我在http://www.regexe.com/ 进行了检查),但在我的 Perl 程序中它不匹配
/foldera/folderb/folderc/folderd/file.ext@@/main
但它确实匹配:
/foldera/folderb/folderc/folderd/file.ext@@/main/5 (RLT-abcde, BLD-abcde, DEV-abcde)
代码如下:
use warnings;
use strict;
my @file_list = `find /folder -type f -name '*.ext'|xargs cleartool lsvtree -all`;
foreach my $file(@file_list){
if ($file=~m/(.+)(main)(.\d)/g){
print $file;
}
}
我很确定我在某处犯了一个愚蠢的错误,但我就是看不到!
提前感谢您的建议。
附:我在 Perl 5.8 和 Perl 5.18 下尝试过,结果相同,操作系统是 Solaris。
【问题讨论】:
-
你应该试试
File::Find模块。 -
看来正则表达式匹配你想要的 - 因为你说它必须在
main/之后有ANY_NUMBER而你的不匹配行没有main/ANY_NUMBER... -
没错,但无论如何我都必须使用专有的“cleartool”命令,所以我很快将它与 find-command 一起使用。将查看 File::Find,艰难。
-
@ring0: 它打印 /foldera/folderb/folderc/folderd/file.ext@@/main/5 (RLT-abcde, BLD-abcde, DEV-abcde) 但我需要 /foldera/文件夹b/folderc/folderd/file.ext@@/main/5