Diff, mostra a linha modificada apenas do arquivo correto

24

Eu tenho arquivo ae gostaria de gerar blinhas de balteração disso desde que foi clonado a. Apenas as linhas modificadas, sem contexto circundante, sem marcas de deslocamento de diferença.

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

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

Por enquanto, o que estou fazendo é diferente de --suppress-common-lines e sed usando as referências anteriores do regex para buscar apenas a parte correta após o espaço em branco. Deve haver uma maneira melhor?

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

diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'
Robottinosino
fonte

Respostas:

34

Com os pacotes GNU diffutils , diffisso produzirá apenas linhas do arquivo b que foram modificadas ou recém-inseridas:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b
homem a trabalhar
fonte
4
Impressionante. Shame a informação é enterrado no Texinfo e nenhuma dica é fornecido na página de homem que eu estava lendo ..
Robottinosino
6

Você precisa adicionar mais uma opção:

grep -vf file1 file2
Sri
fonte
Embora isso não exija que as linhas sejam classificadas, acho que o grep usa muito mais memória e trava para arquivos grandes.
Sridhar Sarnobat
não funciona se as linhas são duplicadas quer
Jayen
4
awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt
1kenthomas
fonte