我有一个名为a_b
的文件我使用以下正则表达式来查找它,它们可以工作:
find . -iname "a_b"
find . -iname "a_*b"
但是下面的格式怎么找不到呢?
find . -iname "a_{1}b"
{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}
- 转义\
和{
。