2010-05-01 9 views
1

Je ces deux fichiersUnix diff pour imprimer uniquement diff pertinentes

fichier: 11

11 
456123 

fichier: 22

11 
789 

Sortie de diff 11 22

2c2 
< 456123 
--- 
> 789 

sortie pour être

< 456123 
> 789 

Je veux de ne pas imprimer les lignes 2c2 et ---. J'ai regardé la page de manuel mais je n'ai trouvé aucune aide. Des idées? Le fichier a plus de 1000 lignes.

+2

Ce diff est faux. – wilhelmtell

+0

Correction de la diff. Si vous voulez fournir des cas de test, fournissez au moins ceux qui fonctionnent :-) – paxdiablo

Répondre

5

Qu'en est-il de diff 11 22 | grep "^[<|>]"?

Mise à jour: Comme Knitti a souligné le modèle correct est ^[<>]

+0

+1. Semble la solution la plus simple et UNIX a été _built_ sur les épaules des pipelines :-) – paxdiablo

+0

grep "^ [<>]" # classes de caractères n'ont pas besoin de canaliser pour diviser les différentes possibilités – knittl

+0

knitti: Vous avez raison, c'est obsolète. – jnns

2

Diff a toute une série d'options utiles comme --old-group-format qui sont décrits brièvement dans l'aide. Ils sont étendus en http://www.network-theory.co.uk/docs/diff/Line_Group_Formats.html

Ce qui suit produit quelque chose de similaire à ce que vous voulez.

diff 11.txt 22.txt --unchanged-group-format="" --changed-group-format="<%<>%>" 

    <456123 
    >789 

Vous pourriez aussi avoir besoin de jouer avec --old-group-format=format (groupes Hunks contenant uniquement les lignes du premier fichier) --new-group-format=format--old-line-format=format (format des lignes seulement à partir du premier fichier) et --new-line-format=format etc

Disclaimer - Je n'ai pas utilisé ceci pour de vrai avant, en fait je les ai juste compris. Si vous avez d'autres questions, je suis heureux de l'examiner plus tard.

Edité pour changer l'ordre des lignes