Ошибка grep: операнд оператора повторения недействителен

Я пытаюсь сравнить два файла, чтобы увидеть, все ли строки (в этом случае строки хороши, хотя они не упорядочены) из file1 присутствуют где-то в file 2 .

Я провел несколько исследований, и кажется, что команда grep -v -f file1 file2 должна быть в состоянии сделать это, однако я получаю операнд оператора повторения ошибки недействительным, когда я пытаюсь это сделать в командной строке.

Любая помощь будет оценена, спасибо!

Сообщение об ошибке указывает, что одна или несколько строк в файле1 не соблюдают синтаксис регулярных выражений. Если вы ищете строки как есть, а не для регулярных выражений, вы должны использовать опцию -F (фиксированные строки).

Однако реальная проблема заключается в том, что вы не можете использовать grep для своей цели, потому что короткие строки могут ошибочно соответствовать более длинным строкам. Например, если file1 содержит пустую строку, то эта строка будет соответствовать всем строкам в файле2 .

Лучшим подходом является сортировка файлов и использование diff :

 TmpFile1=$(mktemp) TmpFile2=$(mktemp) sort $File1 >$TmpFile1 sort $File2 >$TmpFile2 # Display the lines in $File1 which do not appear in $File2 diff $TmpFile1 $TmpFile2 | grep '^>' | cut -c 3- # Delete the temporary files rm $TmpFile1 $TmpFile2