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] Utiliser une variable shell


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [sed] Utiliser une variable shell
    Bonjour,
    J'ai une question très bête mais qui me bloque depuis ce matin.
    Je souhaiterais passer en paramètre d'une fonction :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '1,10d' |sed '$d'|sed '$d'|sed '$d'| sed 's/,$//'| sed "s/^\ *//g"| sed "s/\" *//g"| sed "s/\:*//g"

    Le problème c'est que ça ne marche pas j'ai essayé les guillemets les côtes, les crochets....

    Mais rien ne marche est-ce que cela est au moins possible ?

    Merci et bonne après midi
    Dernière modification par N_BaH ; 08/08/2021 à 13h53. Motif: clarification titre

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    Un très bon exercice pour toi. Comprendre les quotes.
    Les 'simple quotes' protègent de toute interprétation.
    Les "doubles quotes" protègent, mais laissent passer des interprétations comme les variables, par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ var=toto
    $ echo blabla$var
    blablatoto
    $ echo 'blabla$var'
    blabla$var
    $ echo "blabla$var"
    blablatoto
    $
    Ton expression contient des 'simple quotes' et des "double quotes". Donc il va falloir être minutieux dans la protection. Tu crois que les quotes du milieu sont protégés alors qu'ils sortent juste de la protection.
    • Tu peux laisser les simple quotes dans les double quotes, et inversement.
    • Si tu veux un simple quote dans des simple quotes, tu sors, tu écris le caractère et tu rentres.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      $ echo 'J'\''ai un texte qui ne doit pas être interprété.'
      J'ai un texte qui ne doit pas être interprété.
    • Si tu veux un double quote dans des double quotes, tu échappes le caractère.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      $ echo "J'ai un \"texte\" qui ne doit pas être interprété."
      J'ai un "texte" qui ne doit pas être interprété.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Merci beaucoup pour ta réponse.
    Effectivement lors de mes tests je faisais le travail à moitié.
    J'ai donc apporté les modifs de la façon suivante, j'ai entouré le code de guillemets pour l'interprétation du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "sed '\''1,10d'\'' |sed '\''$d'\''|sed '\''$d\''|sed '\''$d'\''| sed '\''s/,$//'\''| sed \"s/^\ *//g\"| sed \"s/\" *//g\"| sed \"s/\:*//g\""
    Quand je fais en écho sur le paramètre j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed '\''1,10d'\'' |sed '\'''\''|sed '\''\''|sed '\'''\''| sed '\''s/,$//'\''| sed "s/^\ *//g"| sed "s/" *//g"| sed "s/\:*//g"
    Est ce que j'ai mal identifié et modifier l'interprétation des caractères spéciaux ?

    Je me retrouve avec l'erreur:
    Sed : -e expression #1, char 1: unknown command: `' '

    Pourtant je n'ai rien comme Sed -e

    Update : le problème ne semble concerner que les simples quotes. Les guillemets sembles parfait

    Merci
    Dernière modification par Invité ; 05/08/2021 à 09h30.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    en général, quand une commande se pipe à elle-même (commande | commande), une seule instance de cette commande devrait suffire.

    il faudrait donc d'abord que tu simplifies ta ligne de commande.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,
    Alors pour le coup je n'ose pas trop c'est un bout de code qu'on m'a donné et totalement fonctionnel pour passer les tests.
    J'aurais peur de toucher quelque chose et perdre de l'info

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Dans la ligne initiale, je ne vois pas pourquoi utiliser des double quotes, toujours dangereux avec sed, puisque $ est souvent présent, potentiellement interprété comme une variable. C'est d'ailleurs ce qui, selon moi, à motiver l'utilisation des simple quotes dans les 4 premières commandes, puisque $d est interprété comme une variable et pas comme "à la dernière ligne, détruire". Les scripts sed doivent toujours être entourés de simple quotes, sauf en cas de besoins spécifiques.

    J'ai donc apporté les modifs de la façon suivante, j'ai entouré le code de guillemets pour l'interprétation du code
    Aucune modification n'est nécessaire si le signe n'est pas le même. Là, tu modifies un simple quote, alors que la protection est assurée par un double quote. Faute.

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

Discussions similaires

  1. Utiliser une variable avec sed
    Par Eto Demerzel dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 11/04/2015, 20h33
  2. Réponses: 21
    Dernier message: 21/08/2008, 23h30
  3. Utilisation de sed avec une variable
    Par Neuromancien2 dans le forum Linux
    Réponses: 5
    Dernier message: 18/07/2008, 17h53
  4. Utiliser une variable d'un script shell
    Par GomuSan dans le forum C
    Réponses: 14
    Dernier message: 10/01/2008, 10h49
  5. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 13h58

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