如何在linux的文件树中找到短语/单词 recursivly

分享于 

4分钟阅读

电脑

 

问题:

如何在Linux中的文件树中递归查找短语/单词?
我试过 find. -name./* | grep my_phrase 我尝试了 grep -r"register_long_arrays" *


回答 1:


grep -r"register_long_arrays" *



将递归查找当前目录中的所有 register_long_arrays

如果要将 findgrep 合并,以限制搜索的文件类型,应该使用如下( 本示例将搜索限制为以 .txt 结尾的文件):


find. -name '*.txt' -exec grep"register_long_arrays" {} ;



在不需要担心转义问题字符的情况下,每个文件都会替换为 {} 所发现的。 注意分号前面的反斜杠。 这确保了分号被转义并传递给exec子句( grep ) 而不是终止find命令。

在查找可能存在的问题时,( 向grep提供 -i 标志以忽略大小写) 或者可能是隐藏文件( 从 . 开始),在这种情况下,* 不是 MATCH,而是提供 *.* 作为参数。


回答 2:


find. -type f -exec grep my_phrase {} ;



将搜索所有常规文件,但它对每个文件调用一次 grep。 这是低效的,将使搜索在缓慢的计算机和/或者大型目录层次结构上显著。 因此,最好使用 xargs:


find. -type f | xargs grep my_phrase



或者,如果你的文件名包含空格的文件,


find. -type f -print0 | xargs -0 grep my_phrase



更简单的是,只使用 -r 选项进行 grep:


grep -r my_phrase. 



请注意,使用。而不是 * 作为文件 NAME 参数。 这样就避免了 * 扩展不包括隐藏文件的问题。


回答 3:

尝试以下方法:


find. -name./* | xargs grep my_phrase



xargs 将在 find 找到的每个文件上调用 grep。


回答 4:

你也可以尝试使用 ack。 它很快。如果你使用代码树,它是很好的工具。

从当前目录递归搜索文件内容中的foobar:

 
ack foobar



 

搜索名称为 MATCH regexp的文件:

 
ack -g"foo(bar)?"



 

回答 5:


find. -exec grep my_phrase {} ;



find 生成当前目录下或者下面的所有文件的列表。 exec 将为找到的每个文件执行命令 grep my_phrase; 只是让它工作的魔力。 它的工作原理通常可以通过 man find 来查看。

如果你想知道不仅仅是找到了 -H 选项,你可以能还需要查看 grep的选项。



文件  FIND    Phrase  
相关文章