Linux“find -regex”不处理绑定

Linux“find -regex”不处理绑定

我有以下文件,需要对它们进行如下匹配:

./foo.bar1.sh       -match

./qux/foo.bar2.sh   -match

./foo.sh            -match

./baz.sh            -no match

./foo.bar3          -no match

我努力了:

find . -regex ".*foo(bar[0-9])?\.sh"

但它没有返回任何内容。我不明白为什么该正则表达式不起作用。

答案1

您的正则表达式有两个错误:

  1. 后面少了一个(文字上的)点foo

  2. find要求您在以下情况下转义括号:不是用作文字括号。

另外,您应该对 之前的点进行转义sh,因为它可以匹配任何字符。

修复后的命令现在内容如下:

find . -regex ".*foo\(\.bar[0-9]\)?\.sh"

find顺便说一下,错误 2. 是我不喜欢 开关的原因-regex:转义不一致。

当然,它是有效的,但是grep -P使用 Perl 兼容正则表达式 (PCRE),因此功能更多,但意外和陷阱更少。

就我个人而言,我会使用:

find . | grep -P "foo(\.bar\d)?\.sh"

相关内容