下面的 find 命令不输出任何内容,也找不到任何"include"文件或目录。
find -regex "*include*" 2>/dev/null
但是,将查找命令管道到 grep -E 中似乎可以找到大多数包含文件。
find ./ 2>/dev/null | grep -E "*include*"
我省略了输出,因为第一个是空白的,第二个匹配很多文件。
我开始需要挖掘 linux 系统文件以找到我需要的答案(尤其是查找宏值)。为了做到这一点,我一直在使用 find |grep -E 查找应该具有我正在寻找的宏的文件。
下面是我今天尝试使用 find 的行(我的根目录是/),没有任何输出。我不想以 root 身份运行该命令,所以我将错误通过管道传输到/dev/null。我检查了正则表达式语法错误的错误,但没有检查。它仍在遍历所有目录,因为我仍然收到"查找:/var/lib:权限被拒绝"错误
find -regex "*include*" 2>/dev/null
然而,这似乎有效并给了我想要的一切。
find ./ 2>/dev/null | grep -E "*include*"
所以我的主要问题是为什么 find -regex 的输出与 find | grep -E 不同?
正则表达式不是一种语言,而是一种具有许多不同的符号和方言的一般数学结构。
对于简单的模式,您通常可以忽略这一事实,因为大多数方言使用非常相似的符号,但是由于您指定了一个带有前导星号的定义不明确的模式,因此您进入了特定于引擎的行为。
grep -E
使用 POSIX ERE 的 GNU 实现,并将您的模式解释为()*includ(e)*
,因此匹配后跟includ
零个或多个e
s(POSIX 表示前导星号的行为是未定义的)。find
使用 Emacs Regex,并将其解释为*includ(e)*
,因此需要在文件名中使用文字星号。
如果您希望两者得到相同的结果,则可以使用find -regextype posix-egrep
,也可以指定一个在两者中等效的正则表达式,例如.*include.*
以匹配include
作为子字符串。
据我了解您的问题,您想在 Linux 目录中查找文件
你应该使用此库
yum install locate
如果你使用 ubuntu
sudo apt-get install locate
准备库
sudo updatedb
然后开始搜索
locate include