Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 猛击。使用find、cat和grep查找文件中的特定文本_Bash_Grep - Fatal编程技术网

Bash 猛击。使用find、cat和grep查找文件中的特定文本

Bash 猛击。使用find、cat和grep查找文件中的特定文本,bash,grep,Bash,Grep,我有数千个文件夹,里面装满了我需要弄清楚的旧垃圾。也就是说,我需要使用掩码在文件中查找包含特定文本的所有文件。但如果我用grep-R“mask”来做,它会搅动所有的垃圾,结果机器就卡住了。 我想通过管道将查找和cat结果发送给grep,但找不到正确的方法 a=$(find ./ -name "*.txt") for i in $a; do cat $i | grep "string" >> result.txt done 像这样的,但似乎不起作用。我在哪里蠢?你不需要cat g

我有数千个文件夹,里面装满了我需要弄清楚的旧垃圾。也就是说,我需要使用掩码在文件中查找包含特定文本的所有文件。但如果我用grep-R“mask”来做,它会搅动所有的垃圾,结果机器就卡住了。 我想通过管道将查找和cat结果发送给grep,但找不到正确的方法

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

像这样的,但似乎不起作用。我在哪里蠢?

你不需要
cat

grep“string”$i
更快

您也不需要
查找

您需要的命令是:

grep -r -l "string" --include="*.txt" .
它的运行速度比
find
grep
的任何组合都快,因为它只运行一个进程

论点如下:

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

如果我遗漏了什么,很抱歉,但是您的目标是什么?如果您只想获取文件名,您可以执行类似于
find./-name“*.txt”-exec grep-l“string”{}\>>result.txt的操作。谢谢。这正是我在
grep“string”文件中需要的“不是文字字符串,它是正则表达式,因此为了清晰起见,您应该说
grep“regexp”file