【发布时间】:2021-03-27 06:07:28
【问题描述】:
我正在尝试查找当前目录中仅包含两位数字的所有文件或目录。
正好两位数的正则表达式是
/^\d{2}$/
所以我尝试了以下但由于反斜杠和正斜杠我卡住了
find path ".//^\d{9}$/"
我使用“./[regex]”是因为我正在查找当前目录中的文件或目录
【问题讨论】:
-
文件名真的只有两位数字,没有其他内容,甚至是扩展名?
我正在尝试查找当前目录中仅包含两位数字的所有文件或目录。
正好两位数的正则表达式是
/^\d{2}$/
所以我尝试了以下但由于反斜杠和正斜杠我卡住了
find path ".//^\d{9}$/"
我使用“./[regex]”是因为我正在查找当前目录中的文件或目录
【问题讨论】:
这里不需要find。下面的命令将列出当前目录中名称由两位数组成的文件和目录。
printf '%s\n' ./[0-9][0-9]
# drop `./' if you don't need it
如果您出于某种原因必须使用正则表达式,以下是分别使用 GNU find 和 BSD find 的方法:
find . -maxdepth 1 -regextype egrep -regex '\./[0-9]{2}'
find -E . -maxdepth 1 -regex '\./[0-9]{2}'
对于任何符合 POSIX 的find,这将做同样的事情:
find . ! -name . -prune ! -name '*[!0-9]*' -name '??'
# number of question marks determines the length of filename
有些人可能会争辩说,[0-9] 可能匹配的不仅仅是 0 到 9 的数字;如果这是一个问题,请先将LC_ALL 设置为C。
【讨论】:
find . -regextype posix-extended -regex "^.*[[:digit:]]{2}.*$"
使用 regextype 标志指定正则表达式类型以及使用 -regex 搜索的正则表达式。搜索目录/文件名中任意位置具有 2 位数字的所有条目。
【讨论】:
像这样使用find:
find . -name '*[0-9]*[0-9]*'
【讨论】: