2010-07-01 117 views
0

我用下面的RE:正则表达式匹配的文件

^file(\d{1,3})(\w*)(?:\.(\d{0,3})(\w*))? 

匹配以下

file1.bla 

file1.1 

file1.1.bla 

但经过:

ls "^file(\d{1,3})(\w*)(?:\.(\d{0,3})(\w*))?" 

我没有看到相关的文件为什么任何比赛? Yael

+0

这是http://stackoverflow.com/questions/3159725/regular-expressions-to-match-files的副本-with-speecial-format其中@yael也问 – 2010-07-02 21:18:38

回答

2

ls仅支持简单匹配?和*和[]

,如果你需要使用正则表达式,使用find

find . -regex '.*/regularexpression' 
2

改为使用ls -1 | grep "^file(\d{1,3})(\w*)(?:\.(\d{0,3})(\w*))?"。这将ls的输出传递给grep,并且grep使用正则表达式过滤输入(这是从ls传递的)。

+0

请给我例 – yael 2010-07-01 19:57:05

+1

你可能想要ls -1,否则你会得到每行多个文件。 – mikerobi 2010-07-01 19:57:22

+0

@yeal,他给了你一个例子。 – mikerobi 2010-07-01 19:57:55

0

什么,你可以使用的外壳文件匹配描述here和其他地方

0

LS-1(即RE上不那么强大的匹配)| perl -ne'print if /^file(\d{1,3})(\w*)(?:.(\d{0,3})(\w*))?/'

( grep -P应该使用Perl正则表达式,但在我的系统上它似乎不起作用。确保使用Perl正则表达式的唯一方法是使用Perl。)