【问题标题】:List files whose names consist of two digits列出名称由两位数字组成的文件
【发布时间】:2021-03-27 06:07:28
【问题描述】:

我正在尝试查找当前目录中仅包含两位数字的所有文件或目录。

正好两位数的正则表达式是

/^\d{2}$/

所以我尝试了以下但由于反斜杠和正斜杠我卡住了

find path ".//^\d{9}$/"

我使用“./[regex]”是因为我正在查找当前目录中的文件或目录

【问题讨论】:

  • 文件名真的只有两位数字,没有其他内容,甚至是扩展名?

标签: regex bash find


【解决方案1】:

这里不需要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

【讨论】:

    【解决方案2】:
     find . -regextype posix-extended -regex "^.*[[:digit:]]{2}.*$"
    

    使用 regextype 标志指定正则表达式类型以及使用 -regex 搜索的正则表达式。搜索目录/文件名中任意位置具有 2 位数字的所有条目。

    【讨论】:

    • 请在您的答案中添加一些解释,以便其他人可以从中学习
    【解决方案3】:

    像这样使用find

    find . -name '*[0-9]*[0-9]*'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 2015-08-12
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      相关资源
      最近更新 更多