Bash模式匹配

时间:2011-10-18 10:22:20

标签: linux bash unix terminal

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

ls *.[jJ][pP][eE][gG]< - 这显然只会找到.jpeg文件扩展名。问题是,如何使[eE可选?

2 个答案:

答案 0 :(得分:7)

比较努力。

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

答案 1 :(得分:2)

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

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

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

针对您的情况的扩展正则表达式,不区分大小写的glob是:

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

您可以在{{3}}找到更多信息和示例。