У меня в папке примерно 1500 2 ГБ файлов, и я хотел бы извлечь из них строки на основе регулярного выражения. Я попытался:
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
без параллели отлично работает с этим регулярным выражением.
Как можно использовать escape-символы в регулярном выражении grep
с parallel
?