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 14/10/2009, à 00:37

argolance

[Résolu] Remplacer espaces par autre caractère dans une chaine.

Bonsoir,
J'essaie depuis un moment, soit avec la commande sed soit avec tr de remplacer les espaces d'une chaine de caractères par \ espace. En vain. Formulé autrement, de mettre \ avant tous les espaces contenus dans une chaine de caractères.

Exemple : /home/mes documents/mes images --> /home/mes\ documents/mes\ images

De plus, cette opération est faite sur une chaine de caractères qui est le contenu d'une variable nommée DIR.

Tout cela devant être fait par l'action d'un bouton dans un script.

Rien que ça !
Quelqu'un aurait-il une idée. C'est pas manque d'avoir essayé dans tous les sens et cherché sur le net. Là, je tourne en rond, j'en peux plus...
Merci de votre aide.

Dernière modification par argolance (Le 21/10/2009, à 11:52)

Hors ligne

#2 Le 14/10/2009, à 01:12

Le Galéanthrope

Re : [Résolu] Remplacer espaces par autre caractère dans une chaine.

Bonsoir,

Je vient de tester, en bash :

echo $BIDULEACONVERTIR | sed s/' '/'\\ '/g

Marche bien. wink


Miaou ! ー Nyamiou Le Galéanthrope

Hors ligne

#3 Le 14/10/2009, à 01:32

AnsuzPeorth

Re : [Résolu] Remplacer espaces par autre caractère dans une chaine.

Bsr

~$ echo "un truc a trou" | sed 's/ /\\\ /g'
un\ truc\ a\ trou

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#4 Le 14/10/2009, à 10:09

Totor

Re : [Résolu] Remplacer espaces par autre caractère dans une chaine.

Bonjour,
ou encore

UnTrucATrou="un truc a trou"
unTrucAvecAntiSlash="${UnTrucATrou// /\\ }"

-- Lucid Lynx --

Hors ligne

#5 Le 14/10/2009, à 10:37

argolance

Re : [Résolu] Remplacer espaces par autre caractère dans une chaine.

Merci les noctambules pour vos réponses qui fonctionnent aussi bien l'une que l'autre.
Par exemple, ce script :

#! /bin/sh

##--------variable---------->>
TEST_DIR="/home/Mes Documents/Mes Images"

echo $TEST_DIR | sed s/' '/'\\ '/g

lancé dans le terminal me renvoie bien :

/home/Mes\ Documents/Mes\ Images
Script completed hit RETURN to close window.

Mais dans le contexte suivant :

#! /bin/sh


export test="
<window title=\"test\" icon-name=\"gtk-preferences\" window-position=\"1\">
 <vbox>
 <hbox>
<text><label>Répertoire:</label></text>
  <entry>
<default>/home/Mes Documents/Mes Images</default>
   <variable>DIR</variable>
  </entry>
  </hbox>
 <hbox>
   <button ok>
   <action>echo $DIR | sed 's/ /\\\ /g'</action>
   <action>EXIT:ok</action>
    </button>
   <button cancel></button>
  </hbox>
 </vbox>
</window>
"

gtkdialog3 --program=test

J'obtiens :

DIR="/home/Mes Documents/Mes Images"
EXIT="ok"
Script completed hit RETURN to close window.

Qu'est-ce-qui va pas ?
Merci.

Dernière modification par argolance (Le 14/10/2009, à 10:43)

Hors ligne

#6 Le 14/10/2009, à 10:42

Totor

Re : [Résolu] Remplacer espaces par autre caractère dans une chaine.

je ne connais pas gtkdialog (AnsuzPeorth me reprendra si je raconte une connerie) mais je pense que cela vient de gtkdialog qui doit réinterpréter "\<espace>" en " "
Du coup, il faut de nouveau protégrer ton espace doublement.


-- Lucid Lynx --

Hors ligne

#7 Le 14/10/2009, à 10:44

argolance

Re : [Résolu] Remplacer espaces par autre caractère dans une chaine.

... C'est bien pour ça que je tourne en rond, je l'avoue... Il est évidemment possible de passer par un fichier texte temporaire (/tmp/dirtemp par exemple) contenant la chaine sur laquelle il est alors possible de faire fonctionner le premier script puis de la récupérer ensuite. Mais il y a sans doute plus simple et plus élégant. Là, (j'ai lu ça quelque part et ça m'a bien fait rire !), c'est un peu "sortir un bazooka pour tuer une mouche" ! Bon pi c'est aussi une excellente occasion d'en apprendre un peu plus...
Merci !

Dernière modification par argolance (Le 14/10/2009, à 11:11)

Hors ligne

#8 Le 14/10/2009, à 14:34

AnsuzPeorth

Re : [Résolu] Remplacer espaces par autre caractère dans une chaine.

Bjr,
Je pense que Totor a raison (comme tjrs).
Mais surtout, la sortie de gtkdialog, le echo qui est sur l'action du bouton ok n'apparait pas, c'est là qu'il y a problème.
La sortie que tu nous donne, c'est uniquement les variables qui elles, ne sont pas modifier, ce qui est normale.
Que cherches tu vraiment à faire ? Si tu veux protéger les espaces en sortie de gui, fait le apres, ne cherche pas à le faire dans le gui !

Comme totor le propose (je connais, j'utilise, mais j'oublie souvent l'utilité de la substitution....)

GUI=$(gtkdialog --program=test)
eval $GUI  #ou tu peux y aller à coup de grep ou autre chercher ce que tu veux)
dir_modifie=${DIR// /\\ /}
echo $dir_modifie

ps: gtkdialog3, le 3, c'est une erreur de frappe ou une nouvelle mouture est sortir en douce ?
le message "hit return ....", je ne l'ai jamais vu chez moi, sans doute un read que tu as ajouté ?

Dernière modification par AnsuzPeorth (Le 14/10/2009, à 14:36)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#9 Le 14/10/2009, à 16:09

argolance

Re : [Résolu] Remplacer espaces par autre caractère dans une chaine.

Bonjour,

gtkdialog3, le 3, c'est une erreur de frappe ou une nouvelle mouture est sortir en douce ?

Il s'agit bien de gtkdialog3 qui est utilisé pour la plupart des scripts de la distribution Puppy Linux.

le message "hit return ....", je ne l'ai jamais vu chez moi, sans doute un read que tu as ajouté ?

Les messages que j'obtiens lorsque je lance mes scripts en console sont recopiés textuellement. Désolé mais je ne sais pas ce qu'est un "read" ???

Je suis un tout petit débutant en lignes de code : j'apprends en bidouillant mes propres scripts qui ne sont que des adaptations, piochant ici et là, de scripts existants, au gré de mes besoins (et aussi pour le plaisir, car ça me plait énormément !).

(je connais, j'utilise, mais j'oublie souvent l'utilité de la substitution....)

... Alors autant dire que "l'utilité de la substitution" et ses subtilités m'échappent complètement. Je veux bien en savoir plus sur le code que tu me proposes. Où se met-il et que fait-il exactement ?
Merci encore (les petits raccourcis en bas de posts sont bien utiles !). J'attends des éclaircissements, si tu le veux bien et en as le temps !

Hors ligne

#10 Le 14/10/2009, à 16:18

argolance

Re : [Résolu] Remplacer espaces par autre caractère dans une chaine.

Note :

La sortie que tu nous donne, c'est uniquement les variables qui elles, ne sont pas modifier, ce qui est normale.

Donc si je comprends bien on ne peut pas directement modifier le contenu actuel d'une variable ?
Le script que j'ai donné plus haut est juste fabriqué pour tester en console si la commande sed fonctionne et rien d'autre. Ce n'est qu'un morceau du script final qui lui, présente une interface graphique avec de multiples entrées etc...

Hors ligne

#11 Le 14/10/2009, à 16:23

AnsuzPeorth

Re : [Résolu] Remplacer espaces par autre caractère dans une chaine.

argolance a écrit :

Il s'agit bien de gtkdialog3 qui est utilisé pour la plupart des scripts de la distribution Puppy Linux.

quand j'aurais 5 mn, j'irai jeter un oeil, peut etre qu'ils ont amélioré gtkdialog, écraser qqles bugs ?

argolance a écrit :

Les messages que j'obtiens lorsque je lance mes scripts en console sont recopiés textuellement. Désolé mais je ne sais pas ce qu'est un "read" ???

C'est déjà etonnant que tu n'as pas le retour du echo en console !

argolance a écrit :

J'attends des éclaircissements, si tu le veux bien et en as le temps !

Vite fait, c'est bientot l'heure.

GUI=$(gtkdialog --program=test)

on mets la sortie de gtkdialog dans une variable, donc la sortie (DIR=/../.. EXIT="ok")

eval $GUI  #ou tu peux y aller à coup de grep ou autre chercher ce que tu veux)

On charge les variables dans le shell ($DIR $EXIT)

dir_modifie=${DIR// /\\ /}

Substitution made in Totor


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#12 Le 15/10/2009, à 10:55

argolance

Re : [Résolu] Remplacer espaces par autre caractère dans une chaine.

Merci beaucoup pour le temps que tu as bien voulu consacrer à ma question !
Je teste ça et te tiens au courant, ne serait-ce que pour ceux qui se poserait la même...

Dernière modification par argolance (Le 15/10/2009, à 10:55)

Hors ligne

#13 Le 17/10/2009, à 11:58

argolance

Re : [Résolu] Remplacer espaces par autre caractère dans une chaine.

Pas réussi à m'en tirer avec ce que tu me proposes (pas compris comment ça se met en œuvre, où on met ce code, etc... C'est pas faute d'y avoir consacré du temps - trop de temps justement !). J'ai lâchement eu recours à un bash externe : ça marche parfaitement, c'est l'essentiel.
Merci encore pour votre attention.
http://www.murga-linux.com/puppy/viewtopic.php?t=47853

Hors ligne