Remplacement simple d'une chaine avec espace [SED] - Shell/Batch - Programmation
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à.
Marsh Posté le 14-11-2006 à 15:12:39
Tu t'embetes pour pas grand chose : sed "s/|$toto_in /|$toto_out /g"
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
Marsh Posté le 16-11-2006 à 19:15:45
Marrant, ca marche bien chez moi :
nicolas@austin ~ $ toto_in="ab c" |
Marsh Posté le 17-11-2006 à 17:37:33
scalpeur a écrit : Si ce n'est que : sed "s/|$toto_in /|$toto_out /g" |
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 :
|
Question: pourquoi le pipe devant chaque dollar ???
Marsh Posté le 17-11-2006 à 21:01:12
ReplyMarsh 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...
Marsh Posté le 05-12-2010 à 17:41:14
Pour plus explications sur la commande sed: http://man2linux.blogspot.com/2010/11/sed.html
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
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
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
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?