Dan*_*ele 1 find regular-expression
我无法找出带-regex
选项的 find 的正确用法:
例如,给出这个例子:
Morcheeba/Big Calm/02 Shoulder Holster.flac
Morcheeba/Big Calm/02. Shoulder Holster.flac
Run Code Online (Sandbox Code Playgroud)
我只想匹配表单中的字符串path/to/file/## filename.ext
,没有点。
我试过:
find Morcheeba/ -regextype egrep -iregex ".*[0-9]{2}*[a-z]*flac$"
Run Code Online (Sandbox Code Playgroud)
和一些变化,但我总是得到所有文件,要么没有。
怎么了?
提前致谢。
请注意,-regex
/ -iregex
(GNU 扩展名)-path
与完整路径上的标准匹配一样,而不仅仅是文件名。
如果你想找到文件,文件的名称(而不是路径)开始用2个十进制数字,用的东西,是不是一个小数位数以下,并在结尾.flac
,你可以做可移植性:
find . -name '[0-9][0-9][!0-9]*.[fF][lL][aA][cC]'
Run Code Online (Sandbox Code Playgroud)
请注意,它不会匹配,01.flac
因为[!0-9]
无法匹配。相反,你可以这样写:
find . -name '[0-9][0-9][!0-9]*' -name '*.[fF][lL][aA][cC]'
Run Code Online (Sandbox Code Playgroud)
那些使用通配符模式,而不是正则表达式。
要使用 GNUfind
的-iregex
,等价物将是:
find . -regextype egrep -iregex '.*/[0-9]{2}[^0-9/][^/]*\.flac'
find . -regextype egrep -iregex '.*/[0-9]{2}([^0-9/][^/]*)?\.flac'
Run Code Online (Sandbox Code Playgroud)
也就是说,我们在开头锚定两位数字,因为我们确保正则表达式的其余部分不跨越 a /
。