A mensagem de erro indica que uma ou mais linhas em arquivo1 não respeitam a sintaxe da expressão regular. Se você estiver procurando por cadeias como está, e não por expressões regulares, deverá usar a opção -F
(strings fixas).
No entanto, o problema real é que você não pode usar grep
para o seu propósito, porque as linhas mais curtas podem coincidir com as linhas mais longas erroneamente. Por exemplo, se arquivo1 contiver uma linha vazia, essa linha corresponderá a todas as linhas em arquivo2 .
Uma abordagem melhor é classificar os arquivos e usar 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