Добавление sudo к вашей команде не должно вызывать проблем, если только эта команда изначально не была запрещена. Команда chsh все равно требует пароль. Использование sudo может изменить корневую оболочку, но sudo по-прежнему будет работать как раньше. Если у вас возникли проблемы, я бы закрыл терминал и открыл новый.
Если ваш file01.txt
не содержит настоящих регулярных выражений , попробуйте:
grep -Ff "file01.txt" "file02.txt" > file03.txt
-F
указывает grep
рассматривать file01.txt
как фиксированные строки, а не регулярные выражения. Это значительно увеличит скорость и значительно снизит требования к памяти.
В качестве альтернативы, если ваш file01.txt
действительно содержит регулярные выражения, вы можете разбить его на части и применить grep
к каждой части отдельно:
split -dn 10 "file01.txt"./tmp-file01.
for f in./tmp-file01.*; do grep -f "$f" "file02.txt"; done >file03.txt
Вышеприведенное разделяет file01.txt
на 10 частей. В зависимости от доступной памяти вам может понадобиться больше.
Если в файле01.txt нет регулярных выражений, используйте -F
во второй строке:
for f in./tmp-file01.*; do grep -Ff "$f" "file02.txt"; done >file03.txt
Вы не можете -паттерн должен быть загружен в grep
и эта память исчерпана.
Но если вы хотите сравнить файлы, почему бы вам просто не использоватьdiff
(после сортировки содержимого )?
Для одной -строки шаблона (как список MD5):
while read md5; do
grep -w "$md5" file02.txt
done < file01.txt > file03.txt
Это, конечно, намного медленнее, особенно с большим файлом file02.txt (, когда он не помещается в кеш ), но работает для любого размера шаблона file01.txt.