如何正确运行查找|与 grep + 转义字符平行?

How to properly run find | parallel with grep + escape characters?

我在一个文件夹中有大约 1500 个 2GB 的文件,我想根据正则表达式从中提取行。我试过了:

find . -regex "filename pattern" -exec grep -P "pattern1\t|pattern2\t|pattern3\t|...|patternN\t" {} +

效果很好,但速度很慢。然后我阅读了有关 运行 grep 和 GNU parallel 的信息,但无法弄清楚如何正确使用它。这是我尝试过的:

find . -regex "filename pattern" | parallel grep -P "pattern1\t|pattern2\t|pattern3\t|...|patternN\t" {}

以及此命令的一些变体。但是,我进入 return:

/bin/bash: pattern1t: command not found
/bin/bash: pattern3t: command not found
/bin/bash: pattern2t: command not found
...

看来问题出在我用来确保匹配 TSV 文件列中的整个字符串的 \t 上。没有并行的 grep 命令与此正则表达式完美配合。

如何在带有 parallelgrep 正则表达式中使用转义字符?

正如@Mark Setchell 指出的那样,我错过了“--quote”论点!此解决方案有效:

find . -regex "filename pattern" -print0 | parallel -0 --quote grep -P "pattern1\t|pattern2\t|pattern3\t|...|patternN\t"