我有一个名为的文件lect1.txt
,lect2.doc
和lect3.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
。
这两种表达方式有什么区别?
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-txt
和lect1xtxt
等)
在你的第二个例子中,你已经引用了,"lect.*"
所以外壳不会扩展它,而是按原样传递给grep
. 仅将模式作为参数传递,grep
将搜索传入的文件名以stdin
获取模式,我相信这就是您所追求的。