Bash 猛击。使用find、cat和grep查找文件中的特定文本
我有数千个文件夹,里面装满了我需要弄清楚的旧垃圾。也就是说,我需要使用掩码在文件中查找包含特定文本的所有文件。但如果我用grep-R“mask”来做,它会搅动所有的垃圾,结果机器就卡住了。 我想通过管道将查找和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
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
。