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 :

Remplacer 1 caractère dans 1 variable en KornShell


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Remplacer 1 caractère dans 1 variable en KornShell
    Bonjour,

    Je suis un train de faire un programme en korn-shell qui modifie un fichier et j'ai un petit problème.

    J'ai un fichier source.txt qui contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    file = //dir1/dirB/file.txt
    ...
    Je veux modifier ce fichier dest.txtpour obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    file = //dir2/dirA/file.sav
    ...

    Ce que je sait :
    le nouveau nom de file est : //dir2/dirA/file.sav il est contenu dans une variable $file
    je veux modifier la ligne du fichier source.txt qui commence par : file =

    Voici ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $file="//dir2/dirA/file.sav"
    sed -e '/^file.*/${file}/' source.txt > dest.txt
    Le problème c'est que mon $file contient des caractères qui sont interprétés par le sed . J'ai pensé à mettre des ` sauf qu'après cela bloque l'interprétation de la variable $file.
    Ce que j'ai pensé faire c'est modifer la variable $file en lui ajoutant les caractères d'échapements, mias je ne sais pas comment faire.
    Si vous avez une idée pour résoudre ce problème, elle sera la bien venu.
    Cdlt,
    Chicken huchette

  2. #2
    Membre confirmé
    Avatar de bster
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2005
    Messages : 372
    Points : 497
    Points
    497
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    rgm(root) /tmp/ >>file=" //dir1/dirB/file.txt" 
    rgm(root) /tmp/ >>echo $file
    //dir1/dirB/file.txt
    rgm(root) /tmp/ >>file=`echo $file | sed -e "s/dir1\/dirB\/file.txt/dir2\/dirA\/file.sav/"`
    rgm(root) /tmp/ >>echo $file
    //dir2/dirA/file.sav
    rgm(root) /tmp/ >>
    donc pour faire ta manip dans le fichier ben pareil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vi -c "s/file=\/\/dir1\/dirB\/file.txt/file=\/\/dir2\/dirA\/file.sav/|:wq" fichier
    ou avec sed... mais sed appelera vi donc...

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Le prob est que le nom du fichier est passé par arguments lors du lancement du fichier... Je ne vais pas demander à l'utilisateur de saisir le nom du fichier avec les caractères d'échapement ...

  4. #4
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Fait le mettre en (double?) quote, ca devrait passer normalement. Ca sera pris comme une seule chaine de caractère.

    Normalement, un utilisateur s'est mettre des quotes...

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci de ta réponse.

    Sauf que le problème c'est que la variable est utilisée pour autre chose qui ne dois pas contenir les caractères d'échappement ...

    En résume, un variable qui contient mon nom de fichier qui contient des caractères interprétable par le sed.

    ex :
    $file = "//dir2/dirA/file.sav"

    cela pose problème lors de l'execution de mon sed...

  6. #6
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    essaye un script PERL tout simplement en manipulant les expressions régulières... Enfin moi ce que j'en dis...

Discussions similaires

  1. Impossible de remplacer un espace dans une variable
    Par kyake dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/10/2009, 12h37
  2. Réponses: 3
    Dernier message: 25/02/2009, 15h59
  3. Réponses: 7
    Dernier message: 03/10/2007, 17h58
  4. Probléme pour remplacer = dans une variable
    Par koKoTis dans le forum Scripts/Batch
    Réponses: 18
    Dernier message: 05/06/2007, 13h37
  5. Réponses: 4
    Dernier message: 30/05/2006, 17h21

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