Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 :

aduxas a écrit :

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

FRUiT a écrit :
> 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

JHU a écrit :

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.

JHU a écrit :

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

FRUiT a écrit :
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