файл патча, основанный на одной строке

232
robert k

у меня есть файл:

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 

каждый из которых unreliable, random content, multiple linesявляется случайным числом строк, со случайным текстом

я пытаюсь создать .patchфайл, который добавляет 4 строки в файл выше, как это:

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 

(когда я говорю «случайно», это не совсем случайно, я просто имею в виду, что не будет двух исправляемых файлов, которые будут иметь одинаковые значения)

я понятия не имею, как добавить содержимое 2 строки после строки,

любая помощь будет оценена

извините, если я не отформатировал этот вопрос правильно

РЕДАКТИРОВАТЬ: просто добавив, что я тоже не могу полагаться на номера строк, и я впервые пытаюсь использовать diff и patch

1
Это звучит как неправильный подход. Почему бы не использовать какой-либо другой инструмент [`sed` или аналогичный] (http://www.markusbe.com/2009/12/how-to-read-a-patch-or-diff-and-understand-its-structure- чтобы применить его, с ручным /)? Они предназначены для сопоставления с образцом и могут добавлять контент. В то время как [`patch`] (https://linux.die.net/man/1/patch) следует применить [` diff`] (http://man7.org/linux/man-pages/man1/diff. 1.html) в файл. «Diff» - это построчное сравнение. Seth 7 лет назад 0

1 ответ на вопрос

0
dirkt

Файл патча в унифицированном формате - это просто количество фрагментов, начинающихся с строки, начинающейся с @@, которая дает номер строки и длину фрагмента в старом и новом файле, а также имя старого и нового файла в начале. Так что если, например, always_the_same_line имеет номер строки 30, файл исправления будет выглядеть

--- 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 

Номер строки легко найти grep -n always_the_same_line, начиная с двух первых строк, включая «ненадежный, случайный контент, одиночную строку», с помощью которого можно найти конечный контекст grep -A1 always_the_same_line, и теперь вам просто нужно немного отформатировать, используя то awk, perlчто вам удобнее всего. создайте файл патча в необходимом формате.