[SHELL] insertion de texte dans un fichier

Résolu
Bonjour à tous,

je suis en train de développer un script dans lequel j'ai besoin d'insérer du texte entre 2 tags dans un fichier existant.
j'ai pensé à sed -i, mais ca ne permet que d'insérer du texte à une ligne connue.

exemple : j'ai un fichier comme suit :

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TITRE</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<span class="textsm"></span>


et j'aimerai qu'il devienne :

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TITRE_NOUVEAU</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="#FFFFFF" text="#000000">
TEXTE_A_RAJOUTER
<span class="textsm"></span>


je précise que je suis sous windows, et que j'utilise cygwin.

Merci si vous avez une idée !
A+
Christophe
Configuration: Windows XP
cygwin

6 réponses

  1. Webmaster
    Bonjour

    Une solution avec sed et bash (mais je pense que j'emploieri une autre méthode pour ce genre de chose, du perl peut-être, ou autre chose encore)

    $ cat test.sh
    #!/bin/bash
    
    IN=test.html
    sed -e '/<span class="textsm"><\/span>/,$d' -e's/<title>.*<\/title>/<title>NOUVEAU_TITRE<\/title>/' $IN
    echo "TON
    CONTENU
    SUR
    PLEIN
    DE
    LIGNES"
    sed  -e '1,/<body bgcolor="#FFFFFF" text="#000000">/d' $IN
    $ sh test.sh > resultat.html


    Cordialement
    0
    1. Modérateur
      Salut,

      Et comme ça :
      sed -e '
      s!TITRE!TITRE_NOUVEAU!
      \!^<span class="textsm"!i\
      TEXTE_A_RAJOUTER\
      avec une nouvelle ligne\
      et une dernière
      ' fichier
      ;-))
      0
      1. Webmaster
        Bien plus classe!

        Je cherchais a faire la même chose mais en ajout a la place de l'insertion, mais il a pas voulu... j'ai pas trop insisté non plus ;-)
        0
      2. Modérateur
        @asevereBen en ajout tu remplaces le "i" par un "a" et ça devrait le faire, non ?
        A moins que je n'ai pas saisi toute ta pensée ;-\

        ;-))
        0
      3. Webmaster
        @jipicySi si, c'est bien ça,

        Mais va savoir, il en voulait pas :(

        J'ai du laisser trainer un truc qu'il n'appreciait pas, mais j'ai pas insisté, je lui ai dit,
        - tu fais ta mauvaise tête ? echo sait faire ça, tant pis pour toi! ;-)
        0
      4. Modérateur
        @asevereIl est trop fort ce "echo" ;-)))
        0
    2. merci asevere pour ta réponse !

      j'ai essayé le 1° sed et ca fonctionne très bien.
      en revanche, je n'arrive pas a faire marcher le 2° sed (pour écrire du texte apres "<body bgcolor=...")

      que signifie le "1," dans ton expression ? et le "/d" à la fin ?

      Merci
      Christophe
      0
      1. Modérateur
        Au cas ou t'aurais sauté un thread ;-))
        $ cat chris
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>TITRE</title>
        <link rel="stylesheet" href="style.css" type="text/css">
        </head>
        <body bgcolor="#FFFFFF" text="#000000">
        <span class="textsm"></span>
        
        $ sed -e '
        s!TITRE!TITRE_NOUVEAU!
        \!^<span class="textsm"!i\
        TEXTE_A_RAJOUTER\
        avec une nouvelle ligne\
        et une dernière
        ' chris
        
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>TITRE_NOUVEAU</title>
        <link rel="stylesheet" href="style.css" type="text/css">
        </head>
        <body bgcolor="#FFFFFF" text="#000000">
        TEXTE_A_RAJOUTER
        avec une nouvelle ligne
        et une dernière
        <span class="textsm"></span>
        
        $
        ;-))
        1
        1. Salut,

          Personnellement, je me serais plus orienté vers awk que sed...
          -2
          1. Merci tout le monde, ca marche très bien !!!
            0

            Discussions similaires

            question pix mot caché

            7 réponses