Tripatch
Inhaltsverzeichnis
Kurzbeschreibung
- Ein Tool zum Austauschen, Einfügen, Löschen von ganzen Textblöcken in einer vorgegebenen Text-Datei.
Das Tauschen/Einfügen der Textblöcke ist auf ganze Zeilen ausgerichtet
die Auswahl von z.B. halben Zeilen wird mit Fehler quittiert.
Intention
- Einfache Erstellung der Patches
ohne sich über Sonderzeichen wie z.B. "/ \ ´"
Gedanken machen zu müssen ( für solche wie mich, die sich mit "sed" nich so anfreunden können ) - ganze Textblöcke in einem Rutsch patchen
- patchen, auch wenn der "Rest" der Orginaldatei variabel ist
Funktionsbeschreibung (ohne Sonderoptionen)
- Im Gegensatz zu anderen Patchmethoden werden für tripatch drei Dateien benötigt ( andere Methoden benötigen nur zwei )
- Das zu patchende Orginal-/Targetlfile - ab jetzt "TGT.FILE"
- Ein File, das die Daten aus dem TGT.FILE enthält, welche zu finden/löschen sind - ab jetzt "DEL.FILE"
- Ein File, welches die neuen, einzufügenden Daten enthält. - ab jetzt "INS.FILE"
- Im TGT.FILE wird nachgeschaut, ob und an welcher Stelle die Daten aus dem DEL.FILE zu finden sind. Diese Daten werden gelöscht und durch den Inhalt des INS.FILE ersetzt.
Bemerkung
Um den Rechenaufwand zu verringern, wird auf die jeweils erste Zeile des DEL.FILE und des INS.FILES ein besonderes Augenmerkt gelegt. Es wird zuerst nur auf das Vorhandensein dieser Zeile getestet. Erst wenn eine dieser gefunden wurde, werden die restlichen Daten an dieser Stelle verglichen. Es ist also von Vorteil, beim Erstellen der Patchdateien, sich den Bereich/Block so auszuwählen, daß dieser mit einer möglichst selten autretenden ersten Zeile beginnt.
Benutzung
Syntax
tripatch <opt1> <opt2>...... <file1 file2 file3> <file1> muss die zu entfernenden/zu findenden Daten enthalten. <file2> muss die einzufuegenden Daten enthalten. <file3> ist das zu patchende File.
Optionen
--help - gibt Hilfe-Text aus --ver - gibt Version aus -f - Patch wird auf alle gefundenen Bloecke angewendet (force) -q - Meldungausgabe unterdruecken (quiet) -i - Block wird nicht geloescht -neuer Block wird dahinter eingefuegt (insert) +i - Block wird nicht geloescht -neuer Block wird davor eingefuegt (insert) -b - zu loeschenden Block speichern -s - Sicherungskopie erstellen -dx - zu loeschende/findende Zeilen werden von links beginnend nur bis x ausgewertet statt x kann ein beliebiges Zeichen eingesetzt werden. (delimit)
Bemerkung:
Alle benutzten Dateien und Verzeichnisse müssen geöffnet, gelesen und beschrieben werden können. -evtl. sind root-Rechte nötig.
Infos/Fehlermeldungen
Infos zum Patchstatus sind in ~/tripatch.info
nachzulesen
Fehlermeldungen werden über "$?" zurückgegeben
--bitte im Script selber nachschauen....
einfache Beispiele:
erstmal die Testdateien TGT.FILE:
hier steht irgendwelcher Text hier steht der zu findende / zu löschende Text hier steht wieder irgendwelcher Text
DEL.FILE:
hier steht der zu findende / zu löschende Text
INS.FILE:
hier steht der neue Text
tauschen: ( keine Option angegeben )
tripatch DEL.FILE INS.FILE TGT.FILE
ergibt gepatchtes TGT.FILE:
hier steht irgendwelcher Text hier steht der neue Text hier steht wieder irgendwelcher Text
einfügen: ( +i / davor)
tripatch +i DEL.FILE INS.FILE TGT.FILE
ergibt gepatchtes TGT.FILE:
hier steht irgendwelcher Text hier steht der neue Text hier steht der zu findende / zu löschende Text hier steht wieder irgendwelcher Text
einfügen: ( -i / dahinter)
tripatch -i DEL.FILE INS.FILE TGT.FILE
ergibt gepatchtes TGT.FILE:
hier steht irgendwelcher Text hier steht der zu findende / zu löschende Text hier steht der neue Text hier steht wieder irgendwelcher Text
Bemerkung:
Wenn file2 leer ist, dann wird durch "tauschen" nur der entsprechende Block gelöscht, da ja nix wieder eingefügt wird.
delimit:
etwas komplexer => demnächst Beispiel als Anhang