我正在嘗試查找與特定模式匹配的文件,但是嘗試運行下面的命令不會返回任何結果,即使存在應該與該模式匹配的文件。
find . -maxdepth 1 -regextype posix-extended -regex ".*/s_[a-zA-Z]_[a-zA-Z]\.png" -exec echo {} \;
我知道.*/
要匹配整個路徑,但不太明白這到底意味著什麼。
它必須匹配的文件例如包括
- s_choose_blue.png
- s_choose_red.png
- s_new_blue.png
答案1
正規表示式的實際問題是它與應該匹配的內容不符。分解它:
.*/
– 任何字符,多次,後跟斜線。這基本上會消耗實際文件名之前的目錄列表,因此它會字面匹配./
(如您的示例中所示),./some/other/dir/
直到最後一個斜杠。這是有效的,因為正規表示式預設是“貪婪的”,這意味著它們盡可能匹配。本質上,這部分允許您只搜尋實際的檔案名稱並從結果中移除路徑。
總而言之,
.*/
如果您關心的是實際文件名,則需要在正規表示式前面添加 。如果您還需要符合檔案路徑的某些部分,則不能使用.*/
s_
– 這在你的例子中效果很好[a-zA-Z]
– 這只消耗一這個班級的人物_
– 後跟底線[a-zA-Z]
– 再次跟隨一特點\.png
– 從字面上匹配點和擴展名
因此,您必須將正規表示式變更為:
.*/s_[a-zA-Z]+_[a-zA-Z]+\.png
您必須使用+
,它基本上表示前一個或多個。