命令行中的正则表达式

时间:2015-11-21 09:07:59

标签: regex bash

我想找到名称如...(1-9)...

的文件
find . -regex '.*/.*\([1-9]\).*'

我首先使用这个,但似乎在他们的路径中给我所有文件1-9。 我试试

find . -regex '.*/.*([1-9]).*'

它有效。但我不知道为什么。我记得在正则表达式中,括号表示一个表达式?或者你想稍后使用类似\ 1,\ 2引用它?这就是我使用反斜杠来逃避它的原因。

任何人都可以帮助我吗? THX

抱歉,我在这里迷惑吗?我想要像书(1).pdf而不是book1.pdf 。 [1-9]。不可行?

2 个答案:

答案 0 :(得分:0)

你需要使用否定的char类。

find . -regex '.*/[^/]*\([1-9]\)[^/]*$'

答案 1 :(得分:0)

您甚至不需要find。只需使用glob表达式匹配([1-9)模式:

printf "%s\n" *\([1-9]\)*

请注意,这将列出名称为([1-9])的当前路径中的所有文件和子目录。

如果您只想列出具有此模式的文件,请使用:

find . -maxdepth 1 -name '*([1-9])*' -type f
相关问题