find 和 grep 管道不返回任何内容

Mar*_*il4 2 grep find

我有一个名为的文件lect1.txtlect2.doclect3.doc

我想得到一个文件,它是一个.txt文件,并包含lect作为文件名。

我试过

find *.txt | grep lect*
Run Code Online (Sandbox Code Playgroud)

它什么也没返回。

但是当我这样做的时候

find *.txt | grep "lect*"
Run Code Online (Sandbox Code Playgroud)

它回来了lect1.txt

这两种表达方式有什么区别?

gar*_*Red 6

grep在命令行传递的文件中搜索第一个参数(模式),或者 stdin如果没有传递文件。

如果没有引号,您的 shell 将扩展lect*到目录中以lect. 您的命令将是:

grep lect1.txt lect2.doc lect3.doc
Run Code Online (Sandbox Code Playgroud)

这意味着在两个文件中搜索文本lect1.txt.doc。除非其中一个.doc文件包含该短语lect1.txt,否则它不会返回任何内容。更准确地说,它会寻找lect1跟任何字符(.)之后txt,所以它也将找到lect1-txtlect1xtxt等)

在你的第二个例子中,你已经引用了,"lect.*"所以外壳不会扩展它,而是按原样传递给grep. 仅将模式作为参数传递,grep将搜索传入的文件名以stdin获取模式,我相信这就是您所追求的。