diff regex
Verfasst: 11.10.2011, 16:57
Ich habe schon einige Seiten durchstöbert und laut denen sollte der folgende Aufruf das gewünschte Resultat liefern. Allerdings tut er das nicht. Vielleicht hat von euch ja jemand Erfahrung mit diff.
Zunächst mal mein Ziel:
Ich prüfe zwei Dateien auf Gleichheit, allerdings sind diese Dateien generiert und enthalten eine Zeitangabe, wann sie erstellt wurden. Diese Zeitangabe möchte ich ignorieren, da nur wichtig ist ob der Inhalt der Datei gleich ist (unglücklicherweise ist dieser Zeitstring Teil des Inhalts).
Genauer ist dieser Zeitstring Teil eines C-Kommentares und sieht etwa wie folgt aus:
/**
* Tue Oct 11 16:09:34 2011 CEST
* ...
*/
Da die restlichen Teile des Kommentars stets identisch sind muss ich mich nur auf dieses Datum konzentrieren. Ich glaub es wird durch das Macro __DATE__ generiert, aber ist ja prinzipiell unwichtig.
diff hat laut manpage die Option -I RE, wobei RE einer Regular Expression entspricht. Diese Option ignoriert Zeilen bzw. Strings, die RE entsprechen.
Ich habe es nun wie folgt probiert:
Allerdings wird nach wie vor diese Zeile bemängelt.
Desweiteren habe ich [[:alpha:]] durch [a-zA-Z], [[:digit:]] durch [0-9] und [*] durch \* ersetz, jedoch ohne Erfolg. Auch habe ich die geschweiften Klammern wie {2} usw einfach durch ein + ersetzt. Auch das brachte nichts. Das Zeichen für den Zeilenanfang (^) hatte ich auch schon draußen und bei den Leerzeichen hatte ich einfach ein .* drin um ganz sicher zu gehen. Nichts hat geholfen. Soweit ich festgestellt habe (mit simpleren Beispielen) kommt diff mit Charakterklassen nicht klar, also z.B. [A-Za-z]+ oder [[:digit:]]. Laut unzähliger Seiten soll das aber ohne Probleme klappen. Daher die Frage wo hier mein Fehler liegt.
Ist ein kleines Problem, hält mich aber ziemlich auf. Muss nämlich eine automatisiertes Testcase-System für unseren Compiler bauen und da hab ich eigentlich nicht die Zeit mich mit sowas noch rumzuärgern. :(
Vielen Dank schonmal
Zunächst mal mein Ziel:
Ich prüfe zwei Dateien auf Gleichheit, allerdings sind diese Dateien generiert und enthalten eine Zeitangabe, wann sie erstellt wurden. Diese Zeitangabe möchte ich ignorieren, da nur wichtig ist ob der Inhalt der Datei gleich ist (unglücklicherweise ist dieser Zeitstring Teil des Inhalts).
Genauer ist dieser Zeitstring Teil eines C-Kommentares und sieht etwa wie folgt aus:
/**
* Tue Oct 11 16:09:34 2011 CEST
* ...
*/
Da die restlichen Teile des Kommentars stets identisch sind muss ich mich nur auf dieses Datum konzentrieren. Ich glaub es wird durch das Macro __DATE__ generiert, aber ist ja prinzipiell unwichtig.
diff hat laut manpage die Option -I RE, wobei RE einer Regular Expression entspricht. Diese Option ignoriert Zeilen bzw. Strings, die RE entsprechen.
Ich habe es nun wie folgt probiert:
Code: Alles auswählen
diff -I '^ [*] [[:alpha:]]{3} [[:alpha:]]{3} [[:digit:]]{1,2} [[:digit:]]{1,2}:[[:digit:]]{2}:[[:digit:]]{2} [[:digit:]]{4} [[:alpha:]]{4}' file.a file.b
Desweiteren habe ich [[:alpha:]] durch [a-zA-Z], [[:digit:]] durch [0-9] und [*] durch \* ersetz, jedoch ohne Erfolg. Auch habe ich die geschweiften Klammern wie {2} usw einfach durch ein + ersetzt. Auch das brachte nichts. Das Zeichen für den Zeilenanfang (^) hatte ich auch schon draußen und bei den Leerzeichen hatte ich einfach ein .* drin um ganz sicher zu gehen. Nichts hat geholfen. Soweit ich festgestellt habe (mit simpleren Beispielen) kommt diff mit Charakterklassen nicht klar, also z.B. [A-Za-z]+ oder [[:digit:]]. Laut unzähliger Seiten soll das aber ohne Probleme klappen. Daher die Frage wo hier mein Fehler liegt.
Ist ein kleines Problem, hält mich aber ziemlich auf. Muss nämlich eine automatisiertes Testcase-System für unseren Compiler bauen und da hab ich eigentlich nicht die Zeit mich mit sowas noch rumzuärgern. :(
Vielen Dank schonmal