Diff, mostra a linha modificada apenas do arquivo correto

22

Eu tenho o arquivo a e b e gostaria de exibir linhas de b que foram alteradas desde que foram clonadas de a . Apenas as linhas modificadas, sem contexto circundante, sem marcas de deslocamento de diferencial.

Como posso fazer isso usando scripts de shell? (Não Python / Perl / PHP /...)

Sed e awk são soluções aceitáveis.

Por enquanto, o que eu estou fazendo é diff -y com --suppress-common-lines e sed usando backreferences regex para apenas buscar a parte correta após o espaço em branco. Deve haver uma maneira melhor?

Usando perl (que é proibido), eu faria algo assim:

diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$//g'
    
por Robottinosino 25.11.2012 / 15:22

3 respostas

30

Com o pacote% GNU diffutils diff , o resultado será apenas as linhas do arquivo b que foram modificadas ou inseridas recentemente:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b
    
por 25.11.2012 / 15:31
6

Você precisa adicionar mais uma opção:

grep -vf file1 file2
    
por 07.07.2014 / 15:47
3
awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt
    
por 05.10.2014 / 07:29