2

我有这个文件

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

但不要显示任何内容。

4

5 回答 5

6

使用bash 扩展模式匹配

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

查找 1 到 3 个数字

ls file[0-9]?([0-9])?([0-9]).txt
于 2012-05-11T14:28:21.163 回答
3

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

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

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

find ./ -maxdepth 1 -regex '.*/file[[:digit:]]\{1,3\}\.txt'
于 2012-05-11T14:27:56.520 回答
1

格雷普救援:

ls file*.txt |grep -v extra
于 2012-05-11T14:25:47.023 回答
1

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

ls -l --hide="*extra*"
于 2012-05-11T14:49:33.167 回答
1

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

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

ls --hide="*.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..(点)。

于 2012-05-11T14:27:45.820 回答