J'ai un ptit problème avec le remplacement d'une chaine de caractère.
Je fois modifier une chaine de caractère afin de remplacer les occurences '\2xF' par '/' .
J'ai voulu utiliser pour ça la commande 'sed' , en tapant :
sed 's/\2xF///g'
mais ça ne fonctionne pas ... j'avais déjà vu la commande sed avec un séparateur ',' donc j'ai testé aussi , mais sans succés.
Desespéré , j'ai essayé de passé par la commande tr
en tapant :
tr '\2xF' '/'
mais les resultats sont pas vraiment ceux que j'attendait (en gros à chaque fois qu'il voit un 2 il commence à faire n'importe koi).
est-ce que quelqu'un aurait une ptite solution à me proposer?
Je suppose que le problème vient du fait que je remplace par un caractère spéciaux , mais je vois pas comment résoudre le soucis.
Merci d'avance.
Dart
# sed 's;\\2xF;/;g'
Posté par pini . Évalué à 1.
[^] # Re: sed 's;\\2xF;/;g'
Posté par dartalouf . Évalué à 1.
Effectivement , ça fonctionne correctement ... en shell.
Malheuresement , vu l'utilisation que je souhaite en faire (utilisation dans un script CGI) , ça ne fonctionne pas.
je developpe un peu plus (au cas ou une bonne ame voudrait se pencher sur le sujet ^^):
dans un script CGI je dois entrer dans un formulaire (méthode : post) une adresse IP suivit d'un '/' et un masque de sous-reseaux (ex : 192.168.0.1/255.255.0.0 )
Lorsque je traite le formulaire et que j'affiche l'information brut reçu j'obtiens un truc du genre 192.168.0.1\2xF255.255.0.0 (me demandez pas trop pourkoi , apparemment une norme du standard html v_v)
Je voulais donc utiliser la commande en question pour remplacer le vilain '\2xF' par un beau '/' ...
Problème principal : ça ne fonctionne pas ^o^
j'ai essayé d'afficher le resultat final (sans succés , il ne m'affiche rien du tout) mais aussi de le redireger vers un fichier pour voir si il écrivait convenablement dans le fichier ... et je dois dire que rien ne fonctionne....
Quelqu'un à une idée sur la marche à suivre ?
[^] # Re: sed 's;\\2xF;/;g'
Posté par pini . Évalué à 3.
Je procèderais par étapes :
1- Valider la méthode de substitution avec une autre pattern simplissime. Par exemple tu saisis dans ton formulaire 192.168.0.1toto255.255.0.0 et dans ton CGI tu fais du sed 's;toto;/;g'. Si ça marche, c'est un bon début.
2- Ensuite, faire plusieurs essais en doublant le nombre de '\' à chaque fois :
sed 's;\\2xF;/;g'
sed 's;\\\\2xF;/;g'
...
3- Enfin, si tu ne t'en sors pas comme ça, tu fais deux champs (IP + masque) au lieu d'un seul (IP/masque).
[^] # Re: sed 's;\\2xF;/;g'
Posté par Antoine Reilles (site web personnel) . Évalué à 3.
En partitulier, il te faut savoir qui echappe quoi. Si tu constriot la requete pour sed dans une chaind de ton cgi. les " " de ton cgi premettent interpretent surement \ comme un caracter d'echappement, il faut dont le proteger par \\. maintenant, sed lui aussi interprete \ de maniere spéciale, font pour faire ne sorte que set ecrive \, il te faudea metter \\\\ dans le cgi
Euh, bon, c'est pas tres clair, mais par contre utiliser echo devrait deja t'aider un peu
# Merci beaucoup
Posté par dartalouf . Évalué à 1.
Je n'ai malheuresement pas réussi à résoudre le soucis (le sed fonctionne sur le script CGI , mais l'utilisation du charactère '\' dans le '\2xF' reste problématique).
J'ai testé de rajouter plusieurs '\' afin d'éviter l'interprétation de sed (et du cgi apparemment) , j'ai fait quelques test avec un echo ... malheuresement ça ne donne rien.
Je vais trouver une autre solution pour résoudre le problème dans mon application (histoire de pas rester bloquer sur un détail).
Merci encore de vous être penché sur le problème
[^] # Re: Merci beaucoup
Posté par kowalsky . Évalué à 4.
echo "<b>55.55.55.55\2xF255.255.255.0</b>" | sed "s~\\\2xF~/~g"
J'ai bien ça comme retour dans la source de la page.
<b>55.55.55.55/255.255.255.0</b>
Peut etre recupere tu les infos par la variable
QUERY_STRING
Peut tu nous en montré plus...?
Si tu fais echo $QUERY_STRING tu a quoi comme retour...?
[^] # Ptet un élèment de réponse
Posté par dartalouf . Évalué à 1.
Effectivement , tout ça me semblait étrange, car j'avais déjà testé un truc similaire à la première commande (faire un simple echo du code html) et effectivement ça fonctionnait.
Mais je pense que l'affichage de la variable Query_String donne un élement de réponse (je débute en CGI et je ne connaissait pas cette variable).
donc voila ce que m'affiche 'echo $QUERY_STRING' lorsque j'entre 192/25 dans mon formulaire:
textfield=192%2F25&Submit=Entrer
Apparemment HTML ne code pas le caractère '/' en '\2xF' , mais plutot en '%2F' ce qui fait que je ne comprends strictement pas pourkoi il y a un autre encodage (en gros pourkoi ma page CGI de traitement de formulaire n'affiche pas %2F mais bien \2xF) .... mais passons.
Force est de constater que le traitement de la chaine était erroné car je voulais interchanger le mauvais jeu de caractère.
Je suppose qu'ici je dois donc transformer la chaine '%2F' en '/' .
Mais malheuresement la commande sed : ' sed "s,%2F,/,g" ' ne marche pas.
(j'ai essayé de rajouter des '\' avant le caractère % , mais rien n'y fait v_v)
Une idée d'ou vient le problème ???
Merci d'avance.
[^] # Re: Ptet un élèment de réponse
Posté par kowalsky . Évalué à 2.
me retourne bien
deck/deck
en cgi, quand à %2F, c'est normal, si il laissait le slash
dans l'URL, je te laisse imaginer le drame...!!
textfield=192%2F25&Submit=Entrer
Pour il y a Submit=Entrer dans $QUERY_STRING...?
C'est voulu ou pas...?
[^] # Re: Ptet un élèment de réponse
Posté par dartalouf . Évalué à 1.
L'erreur venait tout simplement du programmeur (i.e : Moi ^o^).
Merci beaucoup pour l'aide en tout cas....
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.