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*"