Diff, afficher la ligne modifiée à partir du fichier de droite uniquement

24

J'ai un fichier aet bj'aimerais sortir des lignes de bcela changé depuis qu'il a été cloné a. Juste les lignes modifiées, pas de contexte environnant, pas de marques de décalage diff.

Comment puis-je faire cela en utilisant un script shell? (Pas de Python / Perl / PHP / ...)

Sed et awk sont des solutions acceptables.

Pour l'instant, ce que je fais, c'est diff -y avec --suppress-common-lines et sed en utilisant des références arrières regex pour récupérer juste la bonne partie après l'espace blanc. Il doit y avoir un meilleur moyen?

En utilisant perl (ce qui est interdit), je ferais quelque chose comme ceci:

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

Réponses:

34

Avec le paquetage GNU diffutils , diffcela ne produira que les lignes du fichier b qui ont été modifiées ou nouvellement insérées:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b
homme au travail
la source
4
Impressionnant. Dommage que les informations soient enterrées dans le Texinfo et aucun indice ne soit fourni dans la page de manuel que je lisais.
Robottinosino
6

Vous devez ajouter une option supplémentaire:

grep -vf file1 file2
Sri
la source
Bien que cela ne nécessite pas de tri des lignes, je pense que grep utilise beaucoup plus de mémoire et se bloquera pour les gros fichiers.
Sridhar Sarnobat
ne fonctionne pas si les lignes sont dupliquées non plus
Jayen
4
awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt
1kenthomas
la source