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.