Linux“find -regex”不处理绑定


2

我有以下文件,需要匹配它们:

./foo.bar1.sh       -match

./qux/foo.bar2.sh   -match

./foo.sh            -match

./baz.sh            -no match

./foo.bar3          -no match

我试过了:

找 。 -regex“。* foo(bar [0-9])?. sh”

但它什么也没有回报。我无法弄清楚为什么正则表达式不起作用...请帮忙吗?

Answers:


2

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

  1. 它错过了一个(字面)点后 foo

  2. find 要求你逃避括号 用作字面括号。

此外,你应该逃避之前的点 sh,因为它会匹配任何角色。

fixed命令现在显示为:

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

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

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

就个人而言,我会用:

find . | grep -P "foo(\.bar\d)?\.sh"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.