查找文件名正则表达式

时间:2014-06-12 17:04:40

标签: shell

我有一个名为a_b

的文件

我使用以下正则表达式来查找它,它们可以工作:

find . -iname "a_b"

find . -iname "a_*b"

但是下面的格式怎么找不到呢?

find . -iname "a_{1}b"

{1}表示前一个"_"字符应该恰好匹配一次是不正确的?

1 个答案:

答案 0 :(得分:2)

您使用的是正则表达式,但find的{​​{1}}和-iname操作需要模式(水珠)

Patterns (globs)(链接由@Adam提供)只与正则表达式有很大关系,而且更简单,但也不那么强大。

(顺便说一句:在你的具体例子中,你需要既不 - 只是按原样使用这个角色。)

如果您需要使用正则表达式并且-name版本支持它,请使用find-iregex操作(他们是不是 POSIX标准的一部分):

  • GNU -regex (Linux):

    find
  • FreeBSD / OSX find . -regextype posix-extended -iregex ".*/a_{1}b"

    find

注意:

  • find -E . -iregex ".*/a_{1}b" -iregex匹配整个输入路径,因此-regex前缀。
    (相比之下,.*/-iname仅匹配文件名部分。)
  • 两个代码段使用选项明确激活对扩展正则表达式的支持-name / -E),以确保对此类构造的支持作为-regextype posix-extended或允许其使用而无需{1} - 转义\{