Diff, mostra la riga modificata solo dal file giusto


24

Ho un file ae bvorrei visualizzare le righe bmodificate da quando è stato clonato a. Solo le linee modificate, nessun contesto circostante, nessun segno di offset differenziale.

Come posso farlo usando lo shell scripting? (No Python / Perl / PHP / ...)

Sed e awk sono soluzioni accettabili.

Per ora, quello che sto facendo è diff -y con --suppress-common-lines e sed usando regex backreferences per recuperare la parte giusta dopo lo spazio bianco. Ci deve essere un modo migliore?

Usando perl (che è proibito), farei una cosa del genere:

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

Risposte:


34

Con il pacchetto GNU diffutilsdiff questo genererà solo righe dal file b che sono state modificate o appena inserite:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b

4
Eccezionale. Peccato che le informazioni siano sepolte in Texinfo e nessun suggerimento è fornito nella pagina man che stavo leggendo ..
Robottinosino

6

Devi aggiungere un'altra opzione:

grep -vf file1 file2

Sebbene ciò non richieda l'ordinamento delle righe, penso che grep usi molta più memoria e si arresti in modo anomalo per file di grandi dimensioni.
Sridhar Sarnobat,

non funziona se le linee sono duplicate
Jayen,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.