我有这个文件
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
但不要显示任何内容。
你用 ls 做的是一个 glob,而不是一个正则表达式。要根据正则表达式查找文件,您需要使用 find。
find ./ -regex '.*/file[[:digit:]]\{1,3\}\.txt'
这将递归到所有子目录。为了防止这种情况,您可以使用 -maxdepth。
find ./ -maxdepth 1 -regex '.*/file[[:digit:]]\{1,3\}\.txt'
格雷普救援:
ls file*.txt |grep -v extra
如果您的文件在该目录中都是相关的(即没有多余的文件),您可以使用内置选项ls
:
ls -l --hide="*extra*"
在重读了 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.
为.
(点)。