重击使用find,cat和grep在文件中查找特定文本

时间:2019-05-24 14:44:02

标签: bash grep

我有成千上万个需要装满旧垃圾的文件夹。也就是说,我需要使用掩码在文件中查找所有包含特定文本的文件。但是,如果我使用 grep -R“ mask” 进行操作,它将搅乱所有垃圾内容,从而导致机器卡住。 我想通过管道将find和cat结果传递给grep,但找不到正确的方法。

a=$(find ./ -name "*.txt")
for i in $a; do
  cat $i | grep "string" >> result.txt
done

类似的东西,但似乎不起作用。我在哪里傻?

1 个答案:

答案 0 :(得分:1)

您不需要cat
grep "string" $i更快。

您也不需要find

您需要的命令是:

grep -r -l "string" --include="*.txt" .

它的运行速度比findgrep的任何组合都要快,因为它仅运行一个进程。

参数:

  • -r告诉grep递归处理输入目录(.)。
  • -l告诉它取消其正常输出,仅回显匹配文件的名称。它运行更快,因为它会在每个文件的第一个匹配项上停止。
  • "string"是您要搜索的文本。
  • --include="*.txt"将搜索限制为名称与模式匹配的文件。 *.txt"周围的引号是必需的;没有它们,shell会将*.txt扩展到当前目录中的匹配文件列表。
  • .是用于搜索文件的目录;此示例中的当前目录。