如何正确运行查找|与 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
命令与此正则表达式完美配合。
如何在带有 parallel
的 grep
正则表达式中使用转义字符?
正如@Mark Setchell 指出的那样,我错过了“--quote”论点!此解决方案有效:
find . -regex "filename pattern" -print0 | parallel -0 --quote grep -P "pattern1\t|pattern2\t|pattern3\t|...|patternN\t"
我在一个文件夹中有大约 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
命令与此正则表达式完美配合。
如何在带有 parallel
的 grep
正则表达式中使用转义字符?
正如@Mark Setchell 指出的那样,我错过了“--quote”论点!此解决方案有效:
find . -regex "filename pattern" -print0 | parallel -0 --quote grep -P "pattern1\t|pattern2\t|pattern3\t|...|patternN\t"