regex - 如何正确运行find |与 grep + 转义字符并行?

标签 regex grep gnu-parallel

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

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

效果很好,但是速度很慢。然后,我阅读了有关使用 GNU Parallel 运行 grep 的信息,但不知道如何正确使用它。这是我尝试过的:

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
...

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

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

最佳答案

正如 @Mark Setchell 指出的,我错过了“--quote”参数!该解决方案有效:

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

关于regex - 如何正确运行find |与 grep + 转义字符并行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58188604/

相关文章:

javascript - IE 8 中的正则表达式 (Javascript) 问题

linux - 使用 grep 在线匹配模式

linux - GNU 并行负载均衡

linux - `cat` 模拟以不同的颜色突出显示不同的匹配项

linux - 查找包含非打印字符(空字节)的文件

shell - 使用 awk 和并行同时处理多个文件

具有并行 curl 操作的 Bash 脚本

sql - Teradata正则表达式,看后面

regex - 使用 Awk 使用正则表达式和循环对字段求和

regex - 在期望脚本中显示 cdp 邻居