Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1464 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [SED] Remplacement simple d'une chaine avec espace

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SED] Remplacement simple d'une chaine avec espace

n°1474367
scalpeur
Posté le 13-11-2006 à 11:00:22  profilanswer
 

C'est tout bête mais pourtant je n'y parviens pas.
 
Je souhaite tout simplement remplacer une chaîne par une autre.
Seul ennui, il est possible que la chaîne à remplacer tout comme la chaîne de remplacement contienne un ou plusieurs espaces... et à première vue cela fait planter ma ligne de commande.
 
Je souhaite donc remplacer la chaîne contenue dans la variable : $toto_in
par la chaîne contenue dans la variable : $toto_out
Le tout est stocké dans un fichier à l'adresse : $file2
 
J'ai donc la commande :
 
sed 's/|'$toto_in' /|'$toto_out' /g' $file1 > $file2
 
Or à première vue cela ne fonctionne que pour les chaînes ne contenant pas d'espace...
Dès qu'un espace est présent mon fichier de destination ($file2) est vide  :pfff:  
 
Exemple qui fonctionne, avec :  
$toto_in = mama
$toto_out = papa
 
Exemple qui ne fonctionne pas, avec :
$toto_in = ma ma
$toto_out = papa
 
Quelqu'un a-t-il une idée?

mood
Publicité
Posté le 13-11-2006 à 11:00:22  profilanswer
 

n°1475032
scalpeur
Posté le 14-11-2006 à 10:08:09  profilanswer
 

J'ai trouvé une réponse à mon problème.
 
J'ai commencé par remplacer les espaces dans mes variables par des "\ " (anti-slash + espace)
 
J'ai ensuite corrigé l'écriture de ma ligne afin que mes variables soient interprétées comme il faut :
 
sed 's/|'"$toto_in"' /|'"$toto_out"' /g' $file1 > $file2  
 
Et voilà.


Message édité par scalpeur le 14-11-2006 à 10:08:52
n°1475250
matafan
Posté le 14-11-2006 à 15:12:39  profilanswer
 

Tu t'embetes pour pas grand chose : sed "s/|$toto_in /|$toto_out /g"

n°1476606
scalpeur
Posté le 16-11-2006 à 16:04:44  profilanswer
 

Si ce n'est que : sed "s/|$toto_in /|$toto_out /g"
Ne fonctionne pas chez moi ;)

Message cité 1 fois
Message édité par scalpeur le 16-11-2006 à 16:05:31
n°1476781
matafan
Posté le 16-11-2006 à 19:15:45  profilanswer
 

Marrant, ca marche bien chez moi :

nicolas@austin ~ $ toto_in="ab c"
nicolas@austin ~ $ toto_out="12 3"
nicolas@austin ~ $ echo "abc|ab c def" | sed "s/|$toto_in /|$toto_out /g"
abc|12 3 def

n°1477565
Sve@r
Posté le 17-11-2006 à 17:37:33  profilanswer
 

scalpeur a écrit :

Si ce n'est que : sed "s/|$toto_in /|$toto_out /g"
Ne fonctionne pas chez moi ;)


Essaye avec "-e" => sed -e "s/.../.../g"
J'ai parfois eu des résultats surprenant en mettant ou ne mettant pas "-e"...
 

matafan a écrit :

Marrant, ca marche bien chez moi :

nicolas@austin ~ $ toto_in="ab c"
nicolas@austin ~ $ toto_out="12 3"
nicolas@austin ~ $ echo "abc|ab c def" | sed "s/|$toto_in /|$toto_out /g"
abc|12 3 def



Question: pourquoi le pipe devant chaque dollar ???


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1477642
matafan
Posté le 17-11-2006 à 21:01:12  profilanswer
 

Sve@r a écrit :

Question: pourquoi le pipe devant chaque dollar ???


Ca, il faut demander a scalpeur.

n°1479051
Sve@r
Posté le 21-11-2006 à 10:03:45  profilanswer
 

matafan a écrit :

Ca, il faut demander a scalpeur.


Compris - Le pipe est un simple repère de séparation. Scalpeur cherche un pipe suivi de la chaîne 1 et il remplace cet ensemble par de nouveau un pipe (pour ne pas perdre son séparateur) suivi de la chaîne 2.
J'ai été surpris car je suis habitué à voir ":" du monde Unix ou ";" du monde Excel (étroitesse d'esprit ???) et je cherchais partout dans le man une signification "spéciale sed" à ce pipe...[:ddr555]
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°2040139
rkusnik
Posté le 05-12-2010 à 17:41:14  profilanswer
 

Pour plus explications sur la commande sed: http://man2linux.blogspot.com/2010/11/sed.html

n°2042708
rkusnik
Posté le 16-12-2010 à 18:51:32  profilanswer
 

rkusnik a écrit :

Pour plus explications sur la commande sed: http://man2linux.blogspot.com/2010/11/sed.html


 
 
Pour les debutant il existe une tutoriel de prise en main tres simple: http://man2linux.blogspot.com/2010 [...] e-sed.html

mood
Publicité
Posté le 16-12-2010 à 18:51:32  profilanswer
 

n°2387561
khan677
Posté le 09-06-2021 à 07:46:39  profilanswer
 

Pour les débutants, deux petits articles introductifs sur SED http://konkgwin.free.fr/faire/shell/shell_01-sed1/ et http://konkgwin.free.fr/faire/shell/shell_01-sed2/ avec schémas explicatifs

n°2387620
Modération
Posté le 09-06-2021 à 14:52:24  answer
 

laissez ce topic mourir en paix :o


Aller à :
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [SED] Remplacement simple d'une chaine avec espace

 

Sujets relatifs
[processing] programmer un jeu simpleTitre avec ligne (tout simple mais IE ne veut pas)
Question tres simple : cloner un tableauEspace apres une image
Fonction qui renvoit une chaine...Ecrire X caractères d'une chaine
inversé une chaine de caractereTransformation d'une chaine de caractères en entier
[Delphi6]Une fonction EspaceRemplacer une chaine de caractère par une autre dans du texte
Plus de sujets relatifs à : [SED] Remplacement simple d'une chaine avec espace


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR