[SHELL] insertion de texte dans un fichier

Résolu
cestrade -  
 cestrade -
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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  2. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
       
      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
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention  
         
        Ben 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
      2. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Si 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
      3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention  
         
        Il est trop fort ce "echo" ;-)))
        0
  4. cestrade
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cestrade
     
    Merci tout le monde, ca marche très bien !!!
    0
  7. ctiti60 Messages postés 1022 Statut Membre 70
     
    Salut,

    Personnellement, je me serais plus orienté vers awk que sed...
    -2