[SHELL] insertion de texte dans un fichier

Résolu/Fermé
cestrade - 29 nov. 2007 à 12:21
 cestrade - 29 nov. 2007 à 14:42
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
A voir également:

6 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
29 nov. 2007 à 14:29
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
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
29 nov. 2007 à 12:43
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
29 nov. 2007 à 13:17
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
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
29 nov. 2007 à 13:25
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022
29 nov. 2007 à 13:28
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
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
29 nov. 2007 à 13:30
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022
29 nov. 2007 à 13:44
Il est trop fort ce "echo" ;-)))
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci tout le monde, ca marche très bien !!!
0
ctiti60 Messages postés 1017 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 27 mai 2021 70
29 nov. 2007 à 14:33
Salut,

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