diff in Bezug zu sed setzen

N

NoRatu

Grünschnabel
Hallo liebe Community,

ich sitze seit gestern an einem Problem bei dem ihr mir hoffentlich helfen könnt.
Meine Aufgabe ist es zwei Verzeichnisse nach Dateien und weiteren Unterverzeichnissen zu durchsuchen, diese mit Hilfe von sed zu ändern und dann mit diff zu vergleichen. Das mit dem Durchsuchen und ändern klappt auch soweit, nur weiß ich nicht wie ich diff auf diese Änderungen beziehen kann. Bisher werden nur die unveränderten Dateien verglichen.

Bisheriger Code:

find . -name "*.dateiendung" | xargs sed -i 's/$Revision.*$//' ; diff -rq "file/directory1" "file/directory2"

Dass das Semikolon vor dem diff ein Grund dafür ist weiß ich. Allerdings komme ich nach vielem rumprobieren auf keine passende Lösung.

Gruß

PS.: Ich habe gestern erst richtig mit Shell-Programmierung angefangen, daher verzeiht mir bitte etwaige Anfänger Fehler oder mögliche falsche Wortwahl in Bezug auf das Thema. :)
 
Okay, dann versuche ich es nochmal.

Ich habe zwei, ich nenne sie mal Hauptordner, in denen sich weitere Unterordner befinden, die aber in beiden Hauptordnern gleich benannt sind. In jedem dieser Ordner befinden sich Textdateien. Nun möchte ich diese Textdateien mit Hilfe des find Befehls heraussuchen und daraufhin eine Zeile Text, die bei jeder Datei unterschiedlich ist, aber gleich anfängt, mit Hilfe von sed vorübergehend "entfernen". Dies mache ich um den Text in den Dateien mit Hilfe von diff vergleichen zu können, unabhängig von dieser einen Zeile. Die Dateinamen der Dateien die sich in dem Hauptordner 1 und 2 befinden sind gleich. Nur der Inhalt ist anders.
Ausgegeben werden sollen mir dann die Namen der Dateien, bei denen sich der Text unterscheidet.

Mein Problem ist jetzt, dass mir die "veränderten" Dateien mit sed zwar ausgegeben werden so wie ich sie möchte, aber ich diff nicht auf eben diese beziehen kann, sondern nur auf die Ausgangsdateien.

Hoffe das ist bisschen verständlicher. Auch wenn ich, glaube ich, selbst Probleme hätte das zu verstehen. :think:
 
Hä?

Wenn du sed -i benutzt, dann wird die Änderung doch permanent in die Datei geschrieben. Ohne die Backup-Option ist das Original dann futsch.
Ich verstehe immer noch nicht dein Ziel. Willst du aus allen Dateien das erste Vorkommen von $Revision.*$ entfernen und dann ein rekursives Diff-File der Ordnerstruktur erstellen?
Weil genau das sollte die von dir genannte Zeile machen. Allerdings würde ich hier nicht die Ausgabe von find durch eine Pipe und durch xargs leiten, sondern -exec verwenden.
Falls du paarweise Diffs und ein Backup haben möchtest, kannst du das mit
Code:
find . -name "*.dateiendung" -exec sed -i'.bak' 's/$Revision.*$//' {} \; -exec bash -c 'diff -rq ../anderer_ordner/$(basename "{}") "{}" > $(basename "{}").diff' \;
machen.

MfG

Schard
 
Zurück
Oben