首页 > 解决方案 > 如何正确运行 find | 与 grep + 转义字符平行?

问题描述

我在一个文件夹中有大约 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" {}

以及此命令的一些变体。但是,我得到了回报:

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

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

如何在grep正则表达式中使用转义字符parallel

标签: regexgrepgnu-parallel

解决方案


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

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

推荐阅读