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. 是我不喜歡's switch的原因-regex:轉義不一致。

當然,它可以工作,但grep -P使用 Perl 相容正規表示式 (PCRE),因此有更多功能,但驚喜和陷阱較少。

就我個人而言,我會使用:

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

相關內容