下面的find命令不会输出任何内容,也不会找到任何“包含”文件或目录。
find -regex "*include*" 2>/dev/null
但是,将find命令传递给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吗?
答案 0 :(得分:0)
正则表达式不是一种语言,而是一种具有许多不同符号和方言的通用数学结构。
对于简单模式,您通常可以忽略这一事实,因为大多数方言使用的符号非常相似,但是由于您使用前导星号指定了定义错误的模式,因此您会陷入引擎特定的行为。
grep -E
使用POSIX ERE的GNU实现,并将您的模式解释为()*includ(e)*
,因此匹配includ
,后跟零个或多个e
。 (POSIX表示前导星号is undefined的行为。)
find
使用Emacs Regex,并将其解释为\*includ(e)*
,因此在文件名中需要文字星号。
如果您希望两者都得到相同的结果,则可以使用find -regextype posix-egrep
,也可以指定两者都等效的正则表达式,例如.*include.*
,以将include
匹配为子字符串。
答案 1 :(得分:0)
据我所知,您想在Linux目录中查找文件
您应该使用该库
yum install locate
如果您使用ubuntu
sudo apt-get install locate
准备库
sudo updatedb
然后开始搜索
locate include