Bash正则表达式:零到三个数字

时间:2012-05-11 14:23:35

标签: regex bash ls

我有这个文件

file00.txt
file01.txt
...
file99.txt
file102.txt
file102.txt

file00.extra.txt
file01.extra.txt
...

在带有正则表达式的bash(ls)中,如何在没有.extra的情况下显示文件?

我尝试

 ls file[0-9]\{1,3\}.txt

但不要显示任何内容。

5 个答案:

答案 0 :(得分:6)

使用bash extended pattern matching

shopt -s extglob
ls file+([0-9]).txt

查找1到3个数字

ls file[0-9]?([0-9])?([0-9]).txt

答案 1 :(得分:3)

你用ls做的是一个glob,而不是一个正则表达式。要根据正则表达式查找文件,您需要使用find。

find ./ -regex '.*/file[[:digit:]]\{1,3\}\.txt'

这将递归到所有子目录。为防止这种情况,您可以使用-maxdepth。

find ./ -maxdepth 1 -regex '.*/file[[:digit:]]\{1,3\}\.txt'

答案 2 :(得分:1)

Grep to the rescue:

ls file*.txt |grep -v extra

答案 3 :(得分:1)

在重新阅读问题3次之后,以及对使用grep(邪恶的工具)的Frank Schmitt的答案的评论,我的印象是它是家庭作业/ ls-lesson。

然后我有一个完全不同的答案:

ls --hide="*.extra*"

我的第一印象是,我们将使用此解决方案从文件名中删除'extra':

for f in file* ; do echo $f; done 
file00.extra.txt
file00.txt
file01.extra.txt
file01.txt
file102.txt
file99.txt

不使用.extra。显示:

for f in file* ; do echo ${f/.extra./.}; done 
file00.txt
file00.txt
file01.txt
file01.txt
file102.txt
file99.txt

字符串替换${f/.extra./.}.extra.替换为.(点)。

答案 4 :(得分:1)

如果您的文件在该目录中都是相关的(即没有无关的文件),您可以使用ls的内置选项:

ls -l --hide="*extra*"