所以我得到了以下find
命令:
find ./test-folder -type d -mindepth 1 -regex "^.*/\d\{4\}-\d\{2\}-\d\{2\}$"
之前我已经创建了该文件夹./testfolder
并mkdir testfolder
在其中创建了一个文件夹mkdir ./testfolder/2022-10-12
。
当在基于 alpine 的 docker 容器中使用 Bash 运行find
命令时,一切正常并且输出/path/to/testfolder/2022-10-12
如果我在 Lubuntu 机器上的 bash 中运行相同的命令,它不会输出任何内容。
我没有修改 find 命令或它周围的任何内容,我希望它可以在任何机器上工作,但正则表达式似乎表现不同。匹配*
有效,也可以匹配无限多个数字\d*
,但是一旦我尝试匹配-
或使用量词,{4}
它就不再匹配任何内容。
这里可能有什么问题?另外,我怎样才能让它在LUbuntu上运行呢?
答案1
从评论中我推断出实际的问题是“如何匹配\d{4}-\d{2}-\d{2}
LUbuntu 上的等效项”。
问题有两个:
- 首先,如中所解释的为什么 Alpine 上的“查找”命令似乎需要转义“?”但在 Ubuntu 上不行?,AlpineLinux 和 LUbuntu 上的默认 RegEx 语法是不同的。
- 其次,
\d
字符类是“PCRE”样式扩展find
基本正则表达式的一部分, Lubuntu 附带的GNU 不支持。
因此,您应该使用该-regextype
选项显式选择具有所需功能的 RegEx 类型,然后遵循该样式。在你的情况下,你可以使用扩展正则表达式:
find ./testfolder/ -mindepth 1 -regextype "egrep" -regex '^.*/[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}$'