如何通过相同文件类型的许多文件进行grep

时间:2019-07-20 01:36:39

标签: linux ubuntu awk grep

我希望grep浏览许多(20,000)文本文件,每个文本文件各约1,000,000行,因此速度越快越好。

我尝试了下面的代码,它似乎不想做任何事情,即使一个小时后也找不到任何匹配项(现在应该已经完成​​了)。

for i in $(find . -name "*.txt"); do  grep -Ff firstpart.txt $1; done

3 个答案:

答案 0 :(得分:2)

您无需使用循环遍历文件的方法,而只需使用xargs为grep提供文件名,然后让grep遍历所有文件即可。

find . -name "*.txt" | xargs grep $1

我不确定它是否会真正提高性能,但是可能值得尝试。

答案 1 :(得分:2)

Ofir的回答很好。另一种选择:

find . -name "*.txt" -exec grep -fnFH firstpart.txt {} \;

我喜欢为行号添加-n,并为文件名添加-H-H在这种情况下特别有用,因为您可以进行很多匹配。

答案 2 :(得分:0)

handlePageFunction: async ({ request, page }) => { ... const myFunction = () => { console.log('This disappears into the ether.'); log.info('This causes the script to fail with error, "log is not defined"'); } myFunction(); } 是最神奇的工具。您应该得到并使用它。

要递归搜索所有目录中的ripgrep个文件,请执行以下操作:

*.txt

Ripgrep使用最快的正则表达式引擎之一。它使用多个线程。它搜索目录和文件,并以最快的方式将它们过滤为有趣的目录。

太好了。

对于出于任何原因而坚持使用rg -t txt -f patterns.txt 的任何人:

grep

这告诉find -name '*.txt' -type f -print0 | xargs -0 -P 8 -n 8 grep -Ff patterns.txt xargs每个命令使用8个参数,并-n 8并行运行8个副本。缺点是输出可能会交错和损坏。

您可以使用-P 8而不是xargs来完成更出色的工作并保持输出顺序:

parallel