繁体   English   中英

find 和 grep 有什么区别?

[英]What is the difference between find with grep?

这些命令有什么区别:

find . –type f –name '*txt*' 

find . –type f | grep 'txt'

我试图运行它,但有区别,但我想知道为什么?

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

FIND是使用过滤器(如大小,访问时间,修改时间)搜索文件和文件夹的命令。
find命令列出目录中的所有文件及其与一组过滤器匹配的子目录。
此命令最常用于查找具有特定名称的所有文件。

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

find . -name theFile.txt -print

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

find . -name "*.txt" -print

GREP :(全球搜索正则表达式和打印)

搜索文件以查找指定的字符串或表达式。

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

grep myText theFile.txt

结果:Grep将打印出每行包含单词myText

在第一个示例中,您使用find实用程序列出常规文件的文件名,其中文件名包含字符串txt

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

如果目录名中有txt的路径,则第二个命令将找到匹配项。 当你不想匹配像txtfiles/allfiles.tgztransactions/txtelevisions/bigscreen.jpg你会想要使用第一个。

两者之间的区别在于,在第一种情况下, find 正在寻找名称(仅名称)与模式匹配的文件。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM