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 :

[SED] sed et les / \ dans arguments de substitution


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Par défaut [SED] sed et les / \ dans arguments de substitution
    Bonjour,

    Je début, et j'ai cherché... après au bon endroit je suis plus sur ...
    Voila dans un script j'ai besoin de tronquer un chemin.
    ex: dans un fichier j'ai /home/toto/document/test/titi/test.txt
    je voudrais récupéré que test/titi/test.txt dans un fichier
    pour cela je me suis tourner vers sed (je sais pas si j'ai choisi le bon outils)
    pour cela j'ai sauvegarder /home/toto/document/test/titi/test.txt dans un fichier et je passe sed:

    dans chemin.txt on a /home/toto/document/test/titi/test.txt
    pour essayer de tronquer je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var="/home/toto/document/" le contenu de var est le résultat de la commande pwd et donc susceptible de changer
    puis le sed:
    sed -i 's/'$var'//' chemin.txt
    bon je vous rassure j'ai une erreur, autrement je ne serais pas ici ...

    Je commence à en perdre mon shell comme on pourrait dire ...
    Si quelqu'un a une idée et/ou pourrait m'éclaircir sur l'utilisation des / \ dans les variables avec sed je suis preneur.

    Merci

    Totorux

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 660
    Par défaut
    bonjour,

    sed n'est pas indispensable; le Remplacement des paramètres permet de faire de telles choses :
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    path=$(pwd)
    echo $path
    /home/toto/document/
    repertoire=/home/toto/document/test/titi/test.txt
    echo "${repertoire/${path}\/}"
    test/titi/test.txt

    Edit: je n'avais pas bien lu.
    pourquoi le chemin est-il dans un fichier ?
    si c'est réellement nécessaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    path=$(pwd)
    sed 's/'"${path//\//\\/}"'//' chemin.txt
    ou bien, on change le délimiteur d'expression de sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '@'"$path"'@@' chemin.txt
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Par défaut
    Merci de tes réponses, le chemin peu être dans une variable, même a l'origine il l'est, mais j'ai eu l'impression que sed avait des problèmes pour travailler dans une variable.
    Tes solutions fonctionnent dans un terminal mais je sais pas pourquoi dans mon script j'ai a chaque fois l'erreur Bad substitution je suis maudit ....
    Une idée ?
    Dans le script si dessous également
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
    echo "/home/utilisateur/test/titi" >> chemin.txt
    path=$(pwd)
    sed 's/'"${path//\//\\/}"'//' chemin.txt

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 660
    Par défaut
    si le chemin peut être une variable, laisse-le dans une variable, et utilise le Remplacement des paramètres.

    je n'ai, de mon côté, pas d'erreur.

    ton script est exécutable
    tu le lances en tapant ./ton_script
    ...
    ?

    montre-nous la sortie du script, en ajoutant set -x an début, sous le shebang.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre averti
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Par défaut
    Bon c'est bon j'étais fatiguer ou j'avais faim ....
    je lançais le script avec:

    sh test.sh

    en faisant ./test.sh ou bash test.sh en effet ça marche mieux ...

    Bon je vais dormir et je reviens

    Merci encore

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

Discussions similaires

  1. Sed - Récupération de values dans un code source HTML
    Par Kaldyris dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 03/06/2013, 00h48
  2. Commande AWK ou SED pour modification données dans fichier
    Par desbrandesq dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/01/2008, 17h56
  3. . dans argument commande java
    Par Flobel dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2006, 17h53
  4. Réponses: 5
    Dernier message: 29/03/2006, 12h36
  5. gerer les ' dans une chaine pour eviter erreur sql
    Par Malone dans le forum Langage
    Réponses: 3
    Dernier message: 24/08/2005, 14h27

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