[SED] Remplacement simple d'une chaine avec espace

Remplacement simple d'une chaine avec espace [SED] - Shell/Batch - Programmation

Marsh Posté le 13-11-2006 à 11:00:22    

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?

Reply

Marsh Posté le 13-11-2006 à 11:00:22   

Reply

Marsh Posté le 14-11-2006 à 10:08:09    

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
Reply

Marsh Posté le 14-11-2006 à 15:12:39    

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

Reply

Marsh Posté le 16-11-2006 à 16:04:44    

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
Reply

Marsh Posté le 16-11-2006 à 19:15:45    

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

Reply

Marsh Posté le 17-11-2006 à 17:37:33    

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.
Reply

Marsh Posté le 17-11-2006 à 21:01:12    

Sve@r a écrit :

Question: pourquoi le pipe devant chaque dollar ???


Ca, il faut demander a scalpeur.

Reply

Marsh Posté le 21-11-2006 à 10:03:45    

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.
Reply

Marsh Posté le 05-12-2010 à 17:41:14    

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

Reply

Marsh Posté le 16-12-2010 à 18:51:32    

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

Reply

Marsh Posté le 16-12-2010 à 18:51:32   

Reply

Marsh Posté le 09-06-2021 à 07:46:39    

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

Reply

Marsh Posté le 09-06-2021 à 14:52:24    

laissez ce topic mourir en paix :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed