在文件中搜索字符串的更好方法?

在文件中搜索字符串的更好方法?

我正在尝试在硬盘上的某个文件中查找特定的文本字符串。到目前为止,我能想到的最好的方法是:

find -type f / | xargs cat | grep "string to find"

但这只是告诉我该字符串是否存在于某处。

我怎么知道在哪个文件里找到了它?

有没有更好的办法?

答案1

find / -type f -exec grep "string" {} +

这将执行不区分大小写的搜索,虽然速度较慢,但​​更灵活:

find / -type f -exec grep -i "string" {} +

您可能会获得很多结果,因此您可以将其通过管道传输到 less,然后使用fb在输出中逐页向前和向后导航:

find / -type f -exec grep -i "string" {} + | less

如果你知道你正在寻找*.txt文件,你可以进一步细化它:

find / -type f -name "*.txt" -exec grep -i "string" {} + | less

答案2

这应该可以解决问题并且简单得多:

grep -R "some string" /

添加 -n 将显示您需要的行号:

grep -Rn "some string" /

答案3

在这种情况下为什么要使用“cat”?我总是觉得人们毫无理由地使用“cat”很奇怪。只需这样做:

find -type f / | xargs grep "string to find"

当然,搜索整个磁盘上的每个文件会非常慢。如果你发现自己经常需要进行这样的搜索,那么最好使用某种索引程序。例如比格犬是一个相当全面的搜索引擎,它已经存在一段时间了。其他选项包括KDE 的 Strigi或者Google 的桌面搜索

至少,你应该使用“locate”而不是“find”,它只索引文件名而不是其内容,但这仍然可以加快速度。此外,在使用 grep 之前,你应该根据文件类型进行过滤。例如,对 100MB 的 avi 文件或其他文件使用 grep 只是浪费时间。

答案4

我怎么知道在哪个文件里找到了它?

您需要使用-H带有“ ”的“ grep”选项来打印匹配的文件。


还,

  • /使用比根 (' ')稍微好一点的猜测也是一个好主意。
  • John当你搜索大量文件时,-exec切换 ' ' 操作符的方案会有所帮助|

相关内容