fichier de correctif basé sur une seule ligne

1

j'ai un fichier:

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

chacune des unreliable, random content, multiple linesest un nombre aléatoire de lignes, avec du texte aléatoire

J'essaie de créer un .patchfichier qui ajoute 4 lignes au fichier ci-dessus, comme ceci:

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

(Quand je dis aléatoire, ce n'est pas vraiment aléatoire, je veux juste dire qu'aucun fichier en cours de correction n'aura les mêmes choses)

Je ne sais pas comment ajouter du contenu 2 lignes après une ligne,

Toute aide serait appréciée

désolé si je n'ai pas formaté cette question correctement

EDIT: j'ajoute simplement que je ne peux pas compter sur les numéros de ligne non plus, et que c'est la première fois que j'essaie d'utiliser diff et patch

robert k
la source
Cela ressemble à la mauvaise approche. Pourquoi ne pas utiliser un autre outil sedou similaire ? Ceux-ci sont destinés à la correspondance de modèle et pourraient ajouter du contenu. While patchdevrait appliquer diffun fichier à un fichier. A diffest une comparaison ligne par ligne.
Seth

Réponses:

0

Un fichier de correctif au format unifié est constitué d'un certain nombre de morceaux précédés d'une ligne commençant par @@, qui donne le numéro de ligne et la longueur du morceau dans l'ancien et le nouveau fichier, ainsi que le nom de l'ancien et du nouveau fichier au début. Ainsi, si, par exemple, always_the_same_line est le numéro de ligne 30, le fichier de correctif ressemblerait à

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

Le numéro de ligne est facile à trouver avec grep -n always_the_same_lineles deux premières lignes, y compris le "contenu aléatoire non fiable, SINGLE ligne", car le contexte de fin peut être trouvé avec grep -A1 always_the_same_line, et maintenant vous avez juste besoin d'un formatage peu à l'aide awk, perlou de tout ce que vous maîtrisez le mieux. produire le fichier de correctif au format requis.

dirkt
la source