【问题标题】:RegEx for finding all files that start with any letter followed by a numberRegEx 用于查找以任何字母开头后跟数字的所有文件
【发布时间】:2019-09-24 17:16:26
【问题描述】:

我正在尝试使我的 bash 脚本更智能。我有一些代码正在清理 10000 个文件。我要解决的是如何找到所有在 0901*.*.* 前面有一堆字母 a-z 或 A-Z 的文件

find . -maxdepth 1 -type f -regextype posix-extended -regex '[a-z]\(0901).*'

find . -maxdepth 1 -type f -regextype posix-extended -regex '[a-z]*.*' 返回所有内容

同时 find . -maxdepth 1 -type f -regextype posix-extended -regex '[a-z]\(0901).*' 什么都不返回。

我该如何解决这个问题?

【问题讨论】:

标签: regex bash sed find


【解决方案1】:

以下选项应使用sed 作为正则表达式引擎:

find . -maxdepth 1 -type f -regextype sed -regex "[A-Za-z]\+0901.*"

我将a bunch of letters 解释为一个或多个字母,因此我在数字前面使用了[A-Za-z]+。你不应该在这里需要括号,但如果你想使用它们,你必须通过反斜杠转义:

find . -maxdepth 1 -type f -regextype sed -regex "[A-Za-z]\+\(0901\).*"

【讨论】:

  • 是的,我在 0901 前面有一堆字母。我尝试了这两个命令,但它们什么也没返回。前文件是 trm090123.rtf abc090123.rtf zob08110820.rtf
  • @goced 我认为 + 也需要通过反斜杠 q.v 转义。我更新的答案。
【解决方案2】:

使用 -regex 返回整个路径(视情况而定),需要将 ./ 考虑在内。因此,大量借鉴蒂姆的回答。

find . -maxdepth 1 -type f -regextype sed -regex '.*[A-Za-z]\+\(0901\).*'

【讨论】:

    【解决方案3】:

    我认为你必须使用这个正则表达式:

    "[A-Za-z]0901"
    

    祝你好运!

    【讨论】:

    • 在正常的正则表达式中,答案是 [a-zA-Z_]+0901。但是在 Bash 脚本中它是不同的。仍在尝试使语法正确
    猜你喜欢
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2023-02-13
    相关资源
    最近更新 更多