【问题标题】:Bash Pattern MatchingBash 模式匹配
【发布时间】:2011-12-09 23:34:01
【问题描述】:

我正在尝试使用模式匹配来查找目录中具有 .jpg 或 jpeg 扩展名的所有文件。

ls *.[jJ][pP][eE][gG] [eE 成为可选?

【问题讨论】:

    标签: linux bash unix terminal


    【解决方案1】:

    更加努力地匹配。

    ls *.[jJ][pP]{[eE],}[gG]
    

    【讨论】:

    • 非常感谢,这正是我想要的 :)
    【解决方案2】:

    除了标准(简单)通配符模式外,bash ≥4.0 还具有扩展通配符。
    它是off by default。要打开它,请使用:shopt -s extglob

    使用extglob,您可以访问扩展的正则表达式模式以及标准模式。此外,在您的特定情况下,您可以通过启用case insensitive glob(默认情况下也是关闭的)来进一步定制 glob 的行为。要打开它,请使用:shopt -s nocaseglob

    启用 extglob 不会改变标准 glob 的工作方式。您可以混合使用这两种形式。唯一的问题是您必须了解特殊的扩展正则表达式语法。例如,在下面的示例中,它的唯一部分是扩展的正则表达式,是?(e)。其余的是标准全局扩展,启用不区分大小写。

    适合您情况的扩展正则表达式、不区分大小写的全局是:

    shopt -s extglob nocaseglob
    ls -l *.jp?(e)g
    

    您可以在以下位置找到更多信息和示例:Bash Extended Globbing

    【讨论】:

    • 实际上,Bash 在 bash-2.02-alpha1 中得到了扩展的 globbing(即 很久 年前 - 大约 15 年)。在运行./configure 时(即在编译之前)可以选择默认情况下是打开还是关闭。事实上,引入它的版本显示在您为其默认设置提供的链接中。
    猜你喜欢
    • 2020-07-05
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2021-09-18
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多