IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Remplacement simple d'une chaine avec espace


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Remplacement simple d'une chaine avec espace
    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?

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Ce qui correspond à :

    sed 's/|ma\ ma /|papa /g' $tempo_file1 > $tempo_file_next1

    ?

    Je viens d'essayer mais le résultat est le même

  4. #4
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    ton "|" ne sert à rien aussi.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    En effet le "|" ne sert à rien dans le cas présent, c'est juste que je fais ce traitement dans un fichier et le pipe est un caractère significatif.

    Je ne pense qu'il a un impacte sur le problème.

    J'ai fait de nouveaux tests et j'arrive à quelques résultats qui sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/|ma\ ma /|papa /g' $file1 > $file2
    Fonctionne bien en effet.


    Par contre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/|$toto_in /|$toto_out /g' $file1 > $file2
    avecne fonctionne pas

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    En fait, tout le problème revient à faire comprendre à la commande sed d'interpréter le "\" devant l'espace à l'intérieur de la variable $toto_in

    ... Je continue à chercher

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Encadre tes variables par des doubles guillemets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/|'"$toto_in"' /|'"$toto_out"' /g' $file1 > $file2

  8. #8
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    En fait avec des singles quotes, les variables ne sont pas interprétées par le shell, par contre avec des doubles-quotes elles le sont

    ( bref c'est ce qui ripat a dit, mais je t'explique pourquoi )

    Ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ TEST="Ben, un test";
    $ echo "$TEST";
    affichera :
    Ben, un test
    tandis que :
    affichera :
    $TEST
    Allez @++

  9. #9
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup!!
    C'est nickel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/03/2008, 14h28
  2. [RegEx] Remplacement dans une chaine avec PHP, possible ou impossible ?
    Par mf412 dans le forum Langage
    Réponses: 1
    Dernier message: 10/05/2007, 13h40
  3. Construire une chaine avec plusieurs espaces vides
    Par imane_bennouna dans le forum Langage
    Réponses: 10
    Dernier message: 04/08/2006, 09h29
  4. [Regex] Remplacement d'une chaîne avec $
    Par TSnarfK dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 27/01/2006, 10h44
  5. [VB.NET] Compléter une chaine avec des espaces
    Par Lois dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/03/2005, 09h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo