7
votes

SED et AWK: Comment remplacer une section de fichier à un autre contenu?

Fichier A.HTML:

<!--TEMPLATE: banner-->
blahblah
<!--TEMPLATE-END: banner-->


0 commentaires

3 Réponses :


1
votes
$ sed -r 'N;s/(<!--TEMPLATE: banner-->\n).*/\1lalala/' ./sedbanner
<!--TEMPLATE: banner-->
lalala
<!--TEMPLATE-END: banner-->

1 commentaires

Cette solution ne peut pas s'appliquer si j'ai plusieurs lignes à l'intérieur des commentaires, non?



5
votes

Si le texte entre les lignes de marqueur est composé d'une ou plusieurs lignes: xxx

La commande i peut être modifiée en un r Commande et nom de fichier pour lire le texte à partir d'un fichier. xxx


2 commentaires

Cela n'a pas fonctionné sur Mac OS X. Présumer que cela pourrait être une fonctionnalité GNU SED uniquement.


* BSD (y compris OSX) SED nécessite un point-virgule avant la corde de fermeture. Cela utilise des fonctionnalités de SED qui sont mal standardisées. Vous devrez peut-être expérimenter avec les nouvelles lignes et les backslashes - voir la documentation SED SED locale pour la façon dont il aime le a commande à être formaté, etc.



3
votes

Si vous avez le nouveau texte de bannière dans un autre fichier:

awk -v new_file=new_banner.txt '
    /!--TEMPLATE:/ {print; system("cat " new_file); banner=1; next}
    /!--TEMPLATE-END:/ {banner=0}
    banner {next}
    {print}
' a.html


0 commentaires