使用正则表达式量词查找命令,例如 {1,2}

Luk*_*s88 23 bash find regular-expression

我一直在尝试创建一个 find 命令字符串,它将查找以数字 1-99 结尾的所有文件,但排除所有其他文件。

例如,我想找到myfile1 myfile99但不是myfile456而不是myfilebackup

我正在考虑的正则表达式是,myfile[1-9]{1,2}但我无法将其与 find 一起使用。

find . -regex '.*myfile[0-9]{1,2}' 或者 find . -iname 'myfile[0-9]{1,2}'

从我所见,它{1,2}是不起作用的部分。

(顺便说一句,你可以-name -regex互换使用吗?)

任何帮助表示赞赏。

l0b*_*0b0 20

如果您有 GNU find,则可以使用另一种正则表达式类型:

find . -regextype sed -regex '.*myfile[0-9]\{1,2\}'
Run Code Online (Sandbox Code Playgroud)

根据 GNU 的说法,默认情况下find使用中性的 Emacs 正则表达式语法- Emacs 支持\{from,to\}语法,但至少 GNUfind不支持它。

奇怪的是,参考手册没有包含关于sed正则表达式语法的部分,所以谁知道它的哪些部分被支持。

  • `sed` 像 `ed` 似乎是 `posix-basic` 的别名,所以应该与 POSIX BRE 兼容(尽管支持一些扩展,如 `\+`)。它与 GNU `sed` 不兼容,例如 `[\n]` 匹配换行符,而不是 POSIX 所需的反斜杠或 `n`。另请参阅 POSIX ERE 的“-regextype posix-extended”(因此“.*myfile[0-9]{1,2}”),也带有“\s”或“\<”等扩展名 (2认同)

l0b*_*0b0 19

你可以试试

find . -regex '.*myfile[0-9][0-9]?'
Run Code Online (Sandbox Code Playgroud)

或者

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
Run Code Online (Sandbox Code Playgroud)