Que signifie un point d'exclamation dans la sortie diff?

J'ai un devoir pour l'école. Une partie consiste à vérifier les modifications d'un file et à écrire ces modifications dans un file journal. Jusqu'à présent, j'ai trouvé la command diff qui pourrait être utile à mon avis. Disons que j'ai deux files avec un contenu comme celui-ci:

file1

 orange apple 

file2

 orange apple strawberry 

Si j'utilise diff -c file1 file2 dans ce cas, la sortie de la command est

 *** file1 2016-11-24 08:31:19.424712242 +0100 --- file2 2016-11-24 08:25:24.604681751 +0100 *************** *** 1,2 **** --- 1,3 ---- orange apple + strawberry 

qui je pense dit que la ligne avec le signe '+' doit être ajoutée à file1 pour être la même (?).

Maintenant, disons que je change le file1 en ceci:

 orange apple peach 

La sortie de diff -c file1 file2 est:

 *** file1 2016-11-24 08:34:50.647128312 +0100 --- file2 2016-11-24 08:25:24.604681751 +0100 *************** *** 1,3 **** orange apple ! peach --- 1,3 ---- orange apple ! strawberry 

Et ici, je suis perdu, parce que je ne comprends pas ce que signifient ces points d'exclamation. Soudain, la command diff ne semble pas si utile. J'ai essayé de regarder la page man de la command diff, mais je ne trouve rien (peut-être que je ne le vois pas).

  • diff -u

peut être ce dont vous avez besoin pour votre mission.

Pour prendre votre exemple et utiliser diff -u

 michael@x071:[/home/michael]diff -u file? --- file1 2016-11-24 07:48:41 +0000 +++ file2 2016-11-24 07:48:57 +0000 @@ -1,3 +1,3 @@ orange apple -peach +strawberry 

J'espère que cela aide avec votre mission

Un conseil – RTM – ou – Lisez le manuel. Il y a souvent d'autres options. Pour info: les options historiques de diff (et diff3 lors de la comparaison de trois files) devaient aider à créer «programme inout» qui changerait file1 en file2 (ou file2 en file1). Cela a été la base de tous les logiciels de "contrôle de version".

Les options de diff dont je me souviens il y a longtime:

  • -e: Produit la sortie sous une forme adaptée à l'éditeur ed pour convertir File1 en File2.
  • -f: produit la sortie sous une forme qui ne convient pas à l'éditeur ed, montrant les modifications nécessaires pour convertir File1 en File2 dans l'ordre inverse de celui produit sous le drapeau -e.
  • -n: produit une sortie similaire à celle de l'indicateur -e, mais dans l'ordre inverse et avec un nombre de lignes modifiées sur chaque command insert ou delete. C'est la forme utilisée par le système de contrôle de révision (RCS).

La dernière option que je vais souligner est une "nouvelle" – relativement parlant. (également âgé de plusieurs années mais n'était souvent pas dans les implémentations POSIX). Plutôt que de créer une sortie adaptée à «ed» de «RCS», cela convient pour «patch»

  • -u: Produit une comparaison de command diff avec trois lignes de context unifié. La sortie est similaire à celle du drapeau -c, sauf que les lignes de context ne sont pas répétées; à la place, le context, les lignes supprimées et ajoutées sont affichées set, entrelacées.

IMHO: la valeur key de diff -c est comme une amélioration par rapport à la command 'cmp' – lorsque vous voulez en savoir plus que SEULEMENT si deux files diffèrent, ou non. Je n'avais jamais prêté attention (peut-être que c'est une "nouvelle" option) – mais j'y réfléchirai quand ma question est une search récursive de files qui diffèrent entre deux arborescences de directorys.

La sortie de diff est formée de morceaux, chaque morceau correspondant à un set de changements. La ligne *************** marque le début d'un tel morceau.

Chaque morceau vous donne le context dans les files. *** 1,3 **** signifie que ce qui suit est la ligne 1 à 3 dans le premier file, tandis que --- 1,3 ---- signifie que ce qui suit est la ligne 1 à 3 dans le deuxième file.

Un signe less - dans la première colonne indique les lignes qui ont été supprimées, et un signe plus + marque les lignes qui ont été ajoutées. Un point d'exclamation marque les lignes qui ont changé.

Si votre cas, peach dans le premier file a été changé en strawberry dans la seconde.

Votre question a obtenu une réponse dans le file Info de diff, noeud Detailed Context :

Les lignes de context autour des lignes qui diffèrent commencent par deux caractères d'espace. Les lignes qui diffèrent entre les deux files commencent par l'un des caractères indicateurs suivants, suivi d'un caractère d'espace:

  • !

    Une ligne faisant partie d'un groupe d'une ou plusieurs lignes qui ont changé entre les deux files. Il y a un groupe de lignes correspondant marqué avec ! dans la partie de ce morceau pour l'autre file.

  • +

    Une ligne "insérée" dans le deuxième file qui ne correspond à rien dans le premier file.

  • -

    Une ligne "supprimée" dans le premier file qui ne correspond à rien dans le deuxième file.

Le file Info contient de nombreuses informations sur les formats de sortie, y compris les lignes d'en-tête. Je vous recommand de le relire.