linux 查找正则表达式-我可以使用“搜索”而不是匹配吗?

linux 查找正则表达式-我可以使用“搜索”而不是匹配吗?

find实用程序功能强大,但我需要一些附加功能。

它的-regex搜索将每个文件名(或目录名)视为一个字符串,并仅在名称的开头应用给定的正则表达式。就像 python 一样re.match(..)。如果它没有产生匹配,就不会被找到。

例如,如果我想查找包含“log”的文件,(我知道有更简单的方法来查找文件名包含“log”的文件,而无需使用正则表达式,但这仅作为示例)

$ find -regex 'log'
(nothing)

$ find -regex '\./.*log.*$'
./log9
./log7
./log5
./log0
./log2
./log4
./log6
./log8
./log3
./log1

那么,有没有一种方法可以使用正则find表达式-regex对文件名进行匹配,比如grep或 python re.search(..)- 不仅在字符串的开头,而且在任何可以匹配的地方?

答案1

正则表达式不仅适用于开头,还适用于所有的字符串。您只需提供正确的正则表达式,即捕获整个文件名的正则表达式:

$ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Oct  6 15:46 aaafoo
-rw-r--r-- 1 terdon terdon 0 Oct  6 15:46 aaafooaaa
-rw-r--r-- 1 terdon terdon 0 Oct  6 15:46 fooaaa
$ find . -regex ".*foo.*"  
./aaafoo
./aaafooaaa
./fooaaa
$ find . -regex "^./foo.*"  
./fooaaa
$ find . -regex ".*foo"
./aaafoo

您可能正在寻找-name采用 glob 而不是正则表达式的测试:

$ find  . -name "*foo*" 
./aaafoo
./aaafooaaa
./fooaaa

相关内容