Pages : 1
#1 Le 10/05/2011, à 13:01
- JHU
[Résolu] Problème avec sed
Bonjour à toutes et à tous!
J'ai un petit problème avec sed dans un script shell dans lequel je vais récupérer un backup de DB MySQL sur un ftp, puis je dois traiter le fichier pour pouvoir updater la base locale.
Pour être assez précis dans le traitement, je recherche une chaîne un peu spéciale : href=\"../\"><img
Je veux juste remplacer les deux points par une adresse absolue.
Voici le bout de code que j'utilise pour faire ceci dans le script :
# Replace the links to WS
fct_dspMsg "Replace the links to WS\n"
BD_ORIGI="href=\\\"..\/\\\"\>\<img"
BD_LIGHT="href=\\\"http:\/\/www.website.info\/\\\"\>\<img"
echodo "sed -i db.sql -e 's/${BD_ORIGI}/${BD_LIGHT}/g'"
Rem : echodo est une fonction qui affiche juste à l'écran la commande en l'exécutant.
Version de sed : GNU sed version 4.1.5
Ça commence à faire un petit moment que je planche sur cette substitution... Il ne me reste plus que cette partie et mon script est terminé!
Merci d'avance!
Dernière modification par JHU (Le 10/05/2011, à 14:51)
Hors ligne
#2 Le 10/05/2011, à 13:43
- FRUiT
Re : [Résolu] Problème avec sed
echodo "sed -i db.sql -e 's/'"${BD_ORIGI}"'/'"${BD_LIGHT}"'/g'"
Peut-être comme ça ?
Faudrait peut-être aussi échapper les " . " dans BD_ORIG car c'est un caractère spécial en REGEX.
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#3 Le 10/05/2011, à 13:53
- JHU
Re : [Résolu] Problème avec sed
En utilisant cette ligne de commande, j'ai comme erreur en sortie :
sed: -e expression #1, char 19: unknown option to `s'
De plus, cela m'étonnerait que les "." aient une quelconque influence. En effet, un peu plus haut dans le code, je fais déjà un autre replacement :
# Replace "../common" by "http://www.website.info/common"
fct_dspMsg "Replace \"../common\" by \"http://www.website.info/common\"\n"
BD_ORIGI="..\/common\/"
BD_LIGHT="http:\/\/www.website.info\/common\/"
echodo "sed -i db.sql -e 's/${BD_ORIGI}/${BD_LIGHT}/g'"
Celui-ci fonctionne très bien.
Au début, j'ai pensé que le problème pouvait venir des caractères "<" et ">", mais vu qu'ils sont échappés...
Hors ligne
#4 Le 10/05/2011, à 14:27
- aduxas
Re : [Résolu] Problème avec sed
En essayant avec
grep $BD_ORIGI db.sql
ceci semble marcher:
BD_ORIGI='href=\\"..\/\\\"><img'
En fait, pour interpréter les points comme de vrais point, il faudrait
BD_ORIGI='href=\\"\.\.\/\\\"><img'
Dernière modification par aduxas (Le 10/05/2011, à 14:36)
Hors ligne
#5 Le 10/05/2011, à 14:34
- JHU
Re : [Résolu] Problème avec sed
Même en utilisant
BD_ORIGI='href=\\"\.\.\/\\\"><img'
la commande sed ne me retourne aucune erreur, mais le replacement n'est pas effectué..
Edit :
Edit : Attention, ton URL se termine avec \ dans un cas et avec / dans l'autre.
Merci, mais ça n'a rien changé.
Dernière modification par JHU (Le 10/05/2011, à 14:40)
Hors ligne
#6 Le 10/05/2011, à 14:37
- aduxas
Re : [Résolu] Problème avec sed
Oui, je n'ai fait que la moitié du boulot. Reste l'autre. Je reviendrai dessus tout a l'heure, je dois m'absenter un moment.
Hors ligne
#7 Le 10/05/2011, à 14:40
- FRUiT
Re : [Résolu] Problème avec sed
> cat tosed
foo
bar
<a href=\"../\"><img src="bar"/></a>
<a href="../adresse/lien2" target="blank">foo</a>
<a href="../adresse/lien3" target="blank">foo</a>
<a href="../adresse/lien4" target="blank">foo</a>
> cat seder
BD_ORIGI='href=\\\"../\\\"><img'
BD_LIGHT="href=\\\"http:\/\/www.website.info\/\\\"\>\<img"
sed 's@'"${BD_ORIGI}"'@'"${BD_LIGHT}"'@g' tosed
> ./seder
foo
bar
<a href="http://www.website.info/"><img src="bar"/></a>
<a href="../adresse/lien2" target="blank">foo</a>
<a href="../adresse/lien3" target="blank">foo</a>
<a href="../adresse/lien4" target="blank">foo</a>
Dernière modification par FRUiT (Le 10/05/2011, à 14:46)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#8 Le 10/05/2011, à 14:51
- JHU
Re : [Résolu] Problème avec sed
> cat tosed foo bar <a href=\"../\"><img src="bar"/></a> <a href="../adresse/lien2" target="blank">foo</a> <a href="../adresse/lien3" target="blank">foo</a> <a href="../adresse/lien4" target="blank">foo</a> > cat seder BD_ORIGI='href=\\\"../\\\"><img' BD_LIGHT="href=\\\"http:\/\/www.website.info\/\\\"\>\<img" sed 's@'"${BD_ORIGI}"'@'"${BD_LIGHT}"'@g' tosed > ./seder foo bar <a href="http://www.website.info/"><img src="bar"/></a> <a href="../adresse/lien2" target="blank">foo</a> <a href="../adresse/lien3" target="blank">foo</a> <a href="../adresse/lien4" target="blank">foo</a>
Tip top nicke chromel! Ça fonctionne! Merci beaucoup!
Hors ligne
#9 Le 10/05/2011, à 14:52
- FRUiT
Re : [Résolu] Problème avec sed
Mais de rian ^^
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#10 Le 10/05/2011, à 15:03
- FRUiT
Re : [Résolu] Problème avec sed
En utilisant cette ligne de commande, j'ai comme erreur en sortie :
sed: -e expression #1, char 19: unknown option to `s'
C'est parce que tu utilisais le « / » comme délimiteur pour sed.
De plus, cela m'étonnerait que les "." aient une quelconque influence. En effet, un peu plus haut dans le code, je fais déjà un autre replacement :
Dans cet exemple précis peut-être pas, mais en REGEX le « . » est un élément extrêmement important qui signife « n'importe quel caractère » donc méfie toi en grandement. Comme le dit à juste titre aduxas (et moi même) tu devrais quand même les échapper pour plus de sûreté.
Dernière modification par FRUiT (Le 10/05/2011, à 15:04)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#11 Le 10/05/2011, à 15:05
- aduxas
Re : [Résolu] Problème avec sed
sed 's@'"${BD_ORIGI}"'@'"${BD_LIGHT}"'@g' tosed
OK, mais ceci marche également:
sed 's/'$BD_ORIGI'/'$BD_LIGHT'/' db.sql
Hors ligne
#12 Le 10/05/2011, à 15:08
- FRUiT
Re : [Résolu] Problème avec sed
Certes ^^ j'ai un peu tendance à surprotéger avec les guillemets, mais bon ça ne fait pas de mal ^^
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#13 Le 10/05/2011, à 15:17
- aduxas
Re : [Résolu] Problème avec sed
En fait, il n'y a pas besoin non plus de protéger les \ dans BD_ORIGI. Donc
BD_ORIGI='href=\\"\.\./\\"><img'
fait l'affaire. Je n'ai pas le temps de chercher la raison exacte, mais le fait d'utiliser des variables y est pour quelque chose, je pense.
Hors ligne