12
votes

La saveur de l'outil "DIFF" de l'outil semble manquante?

J'ai deux fichiers que j'essayais de comparer avec diff. Les fichiers sont générés automatiquement et présentent un certain nombre de lignes qui ressemblent à:

.*Generated Date \+\:.*


1 commentaires

Re votre ":" Problème: Je n'ai pas eu d'idée de savoir pourquoi, mais essayez (a) utiliser [:] pour voir si cela échappe à tout effet spécial, même si les barres anti-retour ne l'ont pas fait, ni (b) utilisent. Pour faire correspondre n'importe quoi à cette position si vous n'êtes pas inquiet pour les faux positifs ... juste un coup de poignard dans le noir ...


3 Réponses :


-1
votes

Selon la spécification , DIFF Ne prend pas en charge les expressions régulières, et il n'a pas de commutateur -i .

Vous semblez utiliser un non standard de diff avec des extensions non standard. La manière dont ces extensions non standard fonctionnent, doivent être décrites dans la documentation de tout autre type diff que vous utilisez.


2 commentaires

J'utilise GNU DIFF 2.8.1. C'est non-standard?


GNU DIFF 2.8.1 est une version très courante utilisée par de nombreux systèmes d'exploitation GNU / *, tels que Linux. Si la boîte à outils GNU ne peut pas être considérée comme une norme, je ne sais pas ce que vous pouvez. Voir gnu.org/software/diffutils/manual/#Specified-lines :/ A> pour les documents (rares) sur le commutateur -i.



11
votes

Très intéressant ... Je n'ai pas pu trouver une référence de documentation, mais une petite expérimentation a révélé que:

  • ␠ * et . * a fonctionné si zéro-ou-personne est ok pour vous
  • Comme vous l'avez dit, ␠ + ne fonctionne pas. Non plus ␠ {1,} ... mais \ {1, \} travaille
  • Mise à jour: ␠ \ + fonctionne aussi!

    ( représente un caractère d'espace, qui ne s'est pas présenté).

    J'utilise GNU DIFF de GNU Diffutils 2.8.1.

    man Diff et info diff n'a pas expliqué la syntaxe RE.

    J'espère que cela aide.

    Mise à jour: j'ai trouvé une brève section dans Man Grep :

    Expressions régulières de base vs étendues

    dans les expressions de base régulières les méta-caractères?, +, {, |, (et) perdre leur signification spéciale; Utilisez plutôt les versions backslashed \? \ +, \ {, \ |, \ (, et \).

    Donc, je suppose que c'est à l'aide de la syntaxe de la regex de base.


1 commentaires

HM! J'utilise exactement la même version de GNU DIFF, il s'agissait donc d'une bonne vérification de la santé mentale. J'ai changé par regex un peu, et lo-and-voici, tu as raison! Le problème est que cela semble briser horriblement sur le ":". Je vais éditer mon message original pour décrire le problème.



7
votes

OK, voici ce que dit la source GNU DIFF.

re_set_syntax (RE_SYNTAX_GREP | RE_NO_POSIX_BACKTRACKING);


0 commentaires