Aqui está a solução TLDR:
for line in "$(diff a b | sed -n 's/^< //p')"; do grep "${line}" c; done
Segue uma explicação mais detalhada.
Provavelmente, a primeira coisa que você desejará fazer é limpar a saída do comando diff
e extrair as sequências que deseja procurar.
Com base no seu exemplo, parece que você deseja as linhas que só ocorrem no primeiro arquivo (por exemplo, arquivo "a").
O comando a seguir retorna as linhas do primeiro arquivo e remove o prefixo "<":
diff <(diff a b | sed -n 's/^< //p')
Agora você pode fazer um loop sobre esse diff e grep limpos para cada linha, por exemplo:
for line in "$(diff a b | sed -n 's/^< //p')"; do grep "${line}" c; done
Essa abordagem tem a vantagem de ser bastante flexível, pois você pode substituir a instrução grep
por um comando arbitrário.
Por outro lado, se você souber que apenas deseja procurar por essas sequências fixas, também poderá usar o sinalizador -f
para grep
em vez de usar um loop for:
grep -f <(diff a b | sed -n 's/^< //p') c
Outra alternativa é invocar diff
uma segunda vez:
diff <(diff a b | sed -n 's/^< //p') c
Você pode processar essa saída de maneira semelhante:
diff <(diff a b | sed -n 's/^< //p') c | sed -n 's/^< //p'