Regex Bash正则表达式:0到3个数字

Regex Bash正则表达式:0到3个数字,regex,bash,ls,Regex,Bash,Ls,我有这些文件 file00.txt file01.txt ... file99.txt file102.txt file102.txt 及 在带正则表达式的bash(ls)中,如何在没有.extra的情况下显示文件 我试着用 ls file[0-9]\{1,3\}.txt 但是不要什么都不显示。格雷普,救命吧: ls file*.txt |grep -v extra 在将问题重读了三遍之后,以及弗兰克·施密特(Frank Schmitt)对答案的评论,他使用了grep(邪恶的工具),我觉

我有这些文件

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

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

我试着用

 ls file[0-9]\{1,3\}.txt
但是不要什么都不显示。

格雷普,救命吧:

ls file*.txt |grep -v extra

在将问题重读了三遍之后,以及弗兰克·施密特(Frank Schmitt)对答案的评论,他使用了grep(邪恶的工具),我觉得这是家庭作业/ls课程

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

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
显示不带。额外:

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

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

使用ls所做的是一个glob,而不是一个正则表达式。要查找基于正则表达式的文件,需要使用find

find ./ -regex '.*/file[[:digit:]]\{1,3\}\.txt'
这将递归到所有子目录中。要防止出现这种情况,可以使用-maxdepth

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

查找1到3个数字

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

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

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

我认为在类似的解决方案中,可能使用
sed
,但我只需要使用正则表达式juanpablo-为什么需要使用正则表达式?问题是否与所述或家庭作业不同?这不会找到没有“.extra”的文件,这只是将其从文件名中删除。我不确定我们中谁理解正确。我以为他想显示文件名,即使它们包含“extra”,但不包含“extra”。但也许你是对的。你的解释可能更有意义。我很确定这就是我的意思,但我同意“如何在没有.extra的情况下显示文件”可能有点令人困惑。我在键入答案时考虑了extglob。你比我快。有没有办法使用
ls
hide
选项?我找不到一个有用的例子。也许是因为我不知道如何指定“模式”。有人吗?使用
shopt-u extglob
解散extglob标题与文本不匹配。您是搜索0-3个数字,还是要排除“额外”?是否要从名称中删除“extra”,或从列表中隐藏该文件?这是家庭作业吗?
ls file[0-9]?([0-9])?([0-9]).txt
ls -l --hide="*extra*"