Je dois remplacer un gros bloc de texte (code de script shell) dans un fichier par un autre bloc de texte.
Je suis impressionné par le Comment puis-je utiliser sed pour remplacer une chaîne multi-lignes? répondu par antak et Multi-line replace répondu par Bruce Ediger
Mais j'ai du mal à les utiliser.
antak a déjà mentionné dans sa réponse que le streaming de fichier entier (
1h;2,$H;$!d;g;
) vers le tampon n'est pas recommandé pour les fichiers volumineux, car cela surchargerait la mémoire.Je sais
sed
peut être utilisé avec la fonction de bloc pour conserver le texte en dehors du bloc inchangé. Je souhaite utiliser cette fonctionnalité. Mais si j'utilise,sed -i '/marker1/,/marker2/s/.*/new text (code)/' filename
il insérera un nouveau texte (code) à plusieurs reprises pour chaque flux. Par conséquent, je dois faire le bloc visuel en un seul flux, en utilisant quelque chose de similaire à ce qui a été suggéré par antak plus tôt, mais pour le bloc (pas pour le fichier entier).
Comme mentionné par Bruce Ediger, la fonctionnalité d'ajout
ex
qui commence par sea
termine par.
(point) peut être essayée, mais mon nouveau texte (code) contient des lignes commençant par un point, qui peut être considéré comme le point de la syntaxe de l'ajout. Comment puis-je l'utiliser dans cette situation?ex
'sdd
' nombre de lignes 'peut supprimer plusieurs lignes, mais si j'ai un bloc entre / marker1 / et / marker2 / avec le nombre de lignes non fixe (variable) doit être remplacé par un nouveau texte (code), comment faire il ?
sed
ou une ex
commande fonctionne).
r
la commande read file, pour copier le texte d'un autre fichier, si la source du texte de remplacement se trouve dans un fichier.