Assumindo que file1
e file2
estão classificados (caso contrário, join
não funcionará):
diff -u file1 file2 |
grep -E "^[+-]($(echo $(join -o0 file1 file2) | tr ' ' '|'))"
Explicação:
O comando join
gerará o campo de junção que ocorre nos dois arquivos (ou seja, a primeira palavra da linha que é a mesma nos dois arquivos), um em cada linha. Nós echo
this embora tr
, substituindo todos os espaços por um pipe ( |
). O motivo para fazer o echo
ligeiramente complicado (e não apenas direcionar o resultado de join
diretamente por tr
) é que a saída de join
terá uma nova linha no final dela, o que fazemos não quer substituir por um pipe.
Para os arquivos de exemplo ( aqueles que foram originalmente fornecidos pelo OP antes da edição da pergunta ), a join
, echo
, tr
thingy produzirá bar|foo
. Isso é usado como parte de uma expressão regular estendida em grep -E
para filtrar a saída de diff -u
.
A saída da linha de comando é:
-bar c d
+bar x y