Обходной путь для xargs Список аргументов слишком длинный в grep - PullRequest
0 голосов
/ 07 ноября 2019

Для каждой строки файла мне нужно искать, если строка, содержащая регулярные выражения, найдена в другом файле.

Проблема в том, что файлы большие, первая - 24 МБ, а вторая - 115 МБ. ,Я сначала пробовал $ (cat file1) в качестве первого аргумента grep, но он жалуется на размер файла, а затем я пытаюсь сейчас с xargs grep, но та же ошибка

Если я делаю простой поиск строкиработает

find . -name records.txt | xargs grep "999987^00086"
999987^00086^14743^00061^4

, но тогда, если попытаться принять весь файл с аргументом cat в качестве аргумента, это не удастся

1 Ответ

3 голосов
/ 07 ноября 2019

Используйте параметр -f:

grep -f records_tofix.txt

Файл должен содержать шаблоны, каждый из которых находится в отдельной строке.

find может выполнять команды напрямую, без причины для вызова xargs. Синтаксис + -exec не вызывает команду для каждого значения в отдельности, но заполняет всю командную строку аналогично xargs:

find . -name records.txt -exec grep -f records_tofix.txt -- {} +
...