Patchdatei basiert auf einer Zeile

334
robert k

Ich habe eine Datei:

unreliable, random content, multiple lines this_line_is_always_the_same_and_never_repeated_in_file unreliable, random content, SINGLE line unreliable, random content, multiple lines 

Jede der unreliable, random content, multiple linesZeilen ist eine zufällige Anzahl von Zeilen mit zufälligem Text

Ich versuche, eine .patchDatei zu erstellen, die der obigen Datei 4 Zeilen hinzufügt:

unreliable, random content, multiple lines this_line_is_always_the_same_and_never_repeated_in_file unreliable, random content, SINGLE line my_new_line_1 my_new_line_2 ... unreliable, random content, multiple lines 

(Wenn ich zufällig sage, ist es nicht wirklich zufällig, ich meine nur, dass keine 2 Dateien, die gepatcht werden, die gleichen Dinge haben werden.)

Ich habe keine Ahnung, wie ich den Inhalt 2 Zeilen nach einer Zeile einfügen soll.

Jede Hilfe wäre dankbar

Entschuldigung, wenn ich diese Frage nicht richtig formatiert habe

BEARBEITEN: Ich füge hinzu, dass ich mich nicht auf Zeilennummern verlassen kann, und dies ist mein erster Versuch, Diff und Patch zu verwenden

1
Das klingt nach einem falschen Ansatz. Warum nicht ein anderes Tool [`sed` oder ähnliches] verwenden? (Http://www.markusbe.com/2009/12/how-to-read-a-patch-or-diff-and-understand-its-structure- anwenden-it-manuell /)? Diese sind für die Mustererkennung gedacht und könnten Inhalte hinzufügen. Während ["patch"] (https://linux.die.net/man/1/patch) einen ["diff"] anwenden soll (http://man7.org/linux/man-pages/man1/diff). 1.html) in eine Datei. Ein "diff" ist ein Vergleich von Zeile zu Zeile. Seth vor 7 Jahren 0

1 Antwort auf die Frage

0
dirkt

Bei einer Patch-Datei im einheitlichen Format handelt es sich lediglich um eine Anzahl von Blöcken, denen eine Zeile vorangestellt ist @@, die mit beginnt und die Zeilennummer und -länge des Blocks in der alten und neuen Datei sowie den Namen der alten und neuen Datei am Anfang angibt. Wenn also die always_the_same_line die Zeilennummer 30 hat, würde die Patch-Datei aussehen

--- old_file_name +++ new_file_name @@ -30,2 +30,4 @@ this_line_is_always_the_same_and_never_repeated_in_file unreliable, random content, SINGLE line +my_new_line_1 +my_new_line_2 

Die Zeilennummer ist leicht zu finden grep -n always_the_same_line, die ersten zwei Zeilen, darunter die "unzuverlässige, zufällige Inhalte, SINGLE-Zeile", als nachlaufender Kontext können mit gefunden werden grep -A1 always_the_same_line. Jetzt brauchen Sie nur noch etwas Formatierung awk, perloder was auch immer Sie am wohlsten fühlen produzieren Sie die Patch-Datei im gewünschten Format.