erro grep: operando operador de repetição inválido

1

Estou tentando comparar dois arquivos para ver se todas as cadeias de caracteres (neste caso, as linhas estão bem, embora não estejam ordenadas) de file1 estão presentes em algum lugar em file 2 .

Eu fiz um pouco de pesquisa e parece que o comando grep -v -f file1 file2 deve ser capaz de fazer isso, no entanto, recebo o operando do operador de repetição de erros inválido quando tento isso na linha de comando.

Qualquer ajuda seria apreciada, obrigado!

    
por Coolguy 14.11.2016 / 23:16

1 resposta

0

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
    
por 15.11.2016 / 00:08

Tags