我希望grep浏览许多(20,000)文本文件,每个文本文件各约1,000,000行,因此速度越快越好。
我尝试了下面的代码,它似乎不想做任何事情,即使一个小时后也找不到任何匹配项(现在应该已经完成了)。
for i in $(find . -name "*.txt"); do grep -Ff firstpart.txt $1; done
答案 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