使用grep和find命令有什么不同?

24
这些命令之间有什么区别:
find . –type f –name '*txt*' 

find . –type f | grep 'txt'

我尝试运行了这个程序,发现结果有所区别,但我想知道原因是什么?


1
如果你尝试运行它并且有差异,那么你已经知道差异是什么了。我们还能告诉你什么呢? - Ken White
是的,但我想知道为什么会有差异。 - tn2000
5个回答

31

主要区别在于FIND用于使用过滤器搜索文件和目录,而GREP用于在文件或进程中搜索模式。

FIND是一个用于搜索文件和文件夹的命令,可以使用诸如大小、访问时间、修改时间等过滤器。
find命令列出所有符合一组过滤条件的目录及其子目录中的文件。
该命令最常用于查找所有具有特定名称的文件。

要查找当前目录及其所有子目录中名为theFile.txt的所有文件,请输入:

find . -name theFile.txt -print

要在当前目录及其子目录中查找所有扩展名为 .txt 的文件,请输入:


find . -name "*.txt" -print

GREP :(全局搜索正则表达式并打印)

在文件中搜索指定的字符串或表达式。

Grep搜索包含指定模式的行,并默认将它们写入标准输出。

grep myText theFile.txt

结果:Grep将打印每行包含单词myText的内容。


4
在您的第一个示例中,您使用了find实用程序来列出文件名包含字符串txt的普通文件。
在您的第二个示例中,您使用find实用程序列出常规文件的文件名,并通过管道将结果文件名提供给grep实用程序,该实用程序搜索管道的内容(每行一个文件名的文件列表)以查找字符串txt。每次找到此字符串时,都会输出相应的行(其中包含文件名)。

这不是我看到的。在第二个例子中,grep匹配的是find命令的输出,而不是文件的内容。 - dpurrington

1
当目录名中含有txt时,第二个命令将找到匹配项。如果您不想匹配类似于txtfiles/allfiles.tgztransactions/txtelevisions/bigscreen.jpg的路径,则应使用第一个命令。

0
第一种情况是查找文件名(仅名称)与模式匹配的文件,而第二种情况是查找所有类型为 'f' 的文件,并将它们的相对路径作为字符串输出。结果会被管道传递给 grep,过滤输入字符串以匹配模式。模式“txt”将过滤文件路径结果以匹配该模式。重要的是,第二种情况将包括任何位置匹配该路径的文件路径,而第一种情况则不会这样做。

-2

第一条命令将显示文件名中包含txt的文件。 而第二条命令将突出显示所有内容中包含txt的文件的行。


这已经在其他答案中提到过了,例如这里当回答那些已经有答案的老问题时,请确保您提供的是一种新颖的解决方案或者比现有答案更好的解释。 - Eric Aya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接