我有这个文件
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
但不要显示任何内容。
答案 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*"