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'

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

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.