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

Shell et commandes GNU Discussion :

Sed passage de variable = :command garbled


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 56
    Par défaut Sed passage de variable = :command garbled
    Bonjour à tous,

    Depuis ce matin j'essaye sans grand succès toutes les combinaisons de délimiteurs/quotes qui me passent par la tête mais rien n'y fait.

    OS: Solaris 5.10
    Shell: Ksh
    -> sed posix

    Je veux supprimer les lignes commençant par la valeur d'une variable, je cherche donc à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat monfichier.txt | sed '/^'"$mavariable"'/d' > monresultat.txt
    J'ai essayé sans grand succès les syntaxes suivantes:
    <- echoué sans doute car mavariable comprend un '/'

    donc j'ai tenté <- unrecognized command

    en parcourant divers forums j'ai par la suite tenté des combinaisons de quotes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed '/^'""$mavariable""'/d' -> command garbled
    sed "#^"$mavariable"#/d" -> unrecognized command
    and so on..

    Comme je commence franchement à tourner en rond, donc je me tourne vers vous, merci d'avance de vos suggestions et de votre aide ;-)


  2. #2
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Si ta variable contient un "/" , essaye la commande suivante pour le protéger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VARIABLE=${VARIABLE/\//\/}
    Normalement la commande sed doit passer sans problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "/^$VARIABLE/d" titi.txt

  3. #3
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 56
    Par défaut
    Il doit y avoir un problème dans ta substitution, parce que j'ai rencontré le message "Bad substitution" en essayant ta solution.

    Néanmoins merci de ton aide

  4. #4
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Voici le script de test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/ksh
    VARIABLE="to/to"
    echo "VARIABLE avant substitution=[$VARIABLE]"
    VARIABLE=${VARIABLE/\//\/}
    echo "VARIABLE apres substitution=[$VARIABLE]"
    echo "========contenu du fichier==========="
    cat titi.txt
    echo "======exec sed============="
    sed "/^$VARIABLE/d" titi.txt
    echo "==========================="
    Voici le fichier de test:
    et voici la sortie du script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    VARIABLE avant substitution=[to/to]
    VARIABLE apres substitution=[to\/to]
    ========contenu du fichier===========
    to/to
    tutu
    tata
    ======exec sed=============
    tutu
    tata
    ===========================

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 107
    Par défaut
    Si ta variable contient des slashs, il faut les protéger avec des antislashs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    export var='/taa/ga/da/'
    echo $var | sed  -e 's/\//\\\//g'
    \/taa\/ga\/da\/
    Içi, chaque slash est protégé par un anti slash.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    export var='\/taa\/ga\/da\/'
    echo -e '/taa/ga/da/tsoin/tsoin\ntsoin\npiupiu\ntoto\npffiu\n\noups\n' | sed -e "/^$var/d"
    tsoin
    piupiu
    toto
    pffiu
     
    oups
    Comme tu peux voir, le sed a bien supprimé la première ligne qui commençait par /taa/ga/da/

    édit: oups, j'aurais du rafraichir l'onglet !

  6. #6
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,


    Citation Envoyé par madmaxou
    J'ai essayé sans grand succès les syntaxes suivantes:
    <- echoué sans doute car mavariable comprend un '/'
    Essaye plutot ceci :
    Il suffit de remplacer le délimiteur de sed lorsqu'il y a des slashes.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  7. #7
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    C'est en Linuxant qu'on devient .... geek
    et en lisant les docs !!!! Autant pour moi. Je connaissais pas.

  8. #8
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Citation Envoyé par Winnt Voir le message
    Il suffit de remplacer le délimiteur de sed lorsqu'il y a des slashes.
    C'est une commande invalide sur la plupart des sed (je ne savais même pas qu'un sed l'autorisait), ce qui est normal puisque % n'est pas une commande. Pour utiliser le sélecteur de lignes, il faut utiliser / (ou alors \c pour utiliser n'importe quel autre caractère c).

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

Discussions similaires

  1. [10gR2] Exécution en ligne de commande et passage de variable
    Par leanima dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 18/06/2014, 20h15
  2. passage de variable en ligne de commande
    Par PadawanInPerl dans le forum Langage
    Réponses: 15
    Dernier message: 20/01/2014, 13h51
  3. Réponses: 3
    Dernier message: 15/10/2009, 16h28
  4. Passage de variable à SED
    Par rollmol dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 12/02/2008, 12h40
  5. [langage] Passage de variables...
    Par martijan dans le forum Langage
    Réponses: 8
    Dernier message: 30/07/2003, 09h48

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