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 :

Script shell : afficher le contenu des variables entre simple quote


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 13
    Points : 19
    Points
    19
    Par défaut Script shell : afficher le contenu des variables entre simple quote
    Bonjour,

    je cherche un moyen d'afficher mes variables sans interpréter le contenu de celle ci.

    exemple :

    avec une variable :
    je voudrais par exemple faire un :
    et que il m'affiche :
    et non :
    exemple2 :
    pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var="-v"
    cat file.txt | grep $var
    je voudrais qu'il m'affiche les lignes ou il y a "-v" et non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Usage: grep [OPTION]... PATTERN [FILE]...
    Try `grep --help' for more information.

    Il me faudrait donc une technique pour mettre par exemple un backslash devant chaque caractère pour les protéger... ou autre?

    Auriez vous une solution?

    D'avance merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 588
    Points : 19 474
    Points
    19 474
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # de l'utilité des guillemets :
    var="ma_v\ar"
    echo "$var"
    ma_v\ar
     
    # attention aux uuoc (Useless Use Of Cat)
    # -- bien souvent, marque la fin des options d'un programme, ici, grep :
    grep -- -v file.txt

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 13
    Points : 19
    Points
    19
    Par défaut
    Tout d'abord merci de ta réponse.

    Cela fonctionne effectivement, mais je ne peux l'appliquer pour mon cas ou en faite je parcoure un fichier ligne par ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while read line
    do
     echo "$line"
    done < file.txt
    en parcourant le fichier comme cela les \ ne sont pas prient en compte.

    et pour le grep le problème reste identique.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Points : 31
    Points
    31
    Par défaut
    Bonjour mualki,

    le \ permet de protéger un caractère, mais dans ton cas il faut aussi protéger le \ d'où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var="ma_v\\\ar"
    echo $var
    ma_v\ar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var="\\-v"
    grep "$var" file.txt

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 13
    Points : 19
    Points
    19
    Par défaut
    bonjour syjis,

    Le problème est que les variables sont des informations entrées par l'utilisateur en argument ou dans un fichier.

    Je souhaite donc que ces informations soient interprétés telles qu'elles ... Sans que l'utilisateur n'ait à mettre une séries de backslash.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 13
    Points : 19
    Points
    19
    Par défaut
    J'ai résolu le problème du read en ajoutant l'option -r qui ne prend pas en compte les backslash.

    Seulement mon problème s'est reporté sur un sed :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    val="val3\39"
     
    sed '/'"$val"'\:/d' file.txt
    réponse !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $> sed: 1: "/val3\39\:/d": RE error: invalid backreference number

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 588
    Points : 19 474
    Points
    19 474
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cat file.txt
    ma_v\ar
    val3\39
    
    val="val3\39"
    val="${val//\\/\\\\}"
    sed "/$val/d" file.txt
    ma_v\ar
    val="${val//\\/\\\\}" : voir man bash - Remplacement des paramètres

  8. #8
    Membre averti Avatar de exodev
    Inscrit en
    Septembre 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2009
    Messages : 201
    Points : 359
    Points
    359
    Par défaut
    Rien n'empêche de faire un traitement à posteriori des informations rentrées par l'utilisateur, par exemple transformer un \ en \\ pour que l'interprétation se déroule correctement

    Sinon si tes fichiers ne sont pas grands, à la place de la boucle while avec read :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for line in $(cat file.txt)
    do
     echo $line
    done
    bon le temps de répondre le problème du read est résolu

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 13
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cat file.txt
    ma_v\ar
    val3\39
    
    val="val3\39"
    val="${val//\\/\\\\}"
    sed "/$val/d" file.txt
    ma_v\ar
    val="${val//\\/\\\\}" : voir man bash - Remplacement des paramètres
    j'ai toujours un message d'erreur quand j'essaye d'utiliser cette technique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $> Syntax error: Bad substitution
    meme si je lui met cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    val="${val//a/b}"

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 588
    Points : 19 474
    Points
    19 474
    Par défaut
    bizarre. Quel shell utilises-tu ?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 13
    Points : 19
    Points
    19
    Par défaut
    j'ai essayé sur tcsh et bash... même résultat, mais c'est sur les serveurs de mon école peut être qu'ils sont pas à jour, car quand je fais un man sh il me met bien les modifications de parametre mais il n'y a pas la partie sur le remplacement de caractère comme dans celui que N_BaH as donné.

    Pour ceux que ça pourrait intéresser J'ai trouvé une alternative en utilisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed "s/chaine_a_remplacer/chaine_de_remplacement/g"

    Merci à tous de votre aide

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

Discussions similaires

  1. [Notepad++ xdebug] Contenu des variables qui ne s'affiche pas
    Par fepano124 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 25/09/2013, 21h53
  2. Script shell: afficher le texte entre 2 bornes.
    Par panchan173 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 18/07/2012, 16h24
  3. Réponses: 2
    Dernier message: 22/10/2009, 01h26
  4. script shell Afficher contenu fichier
    Par kaso54 dans le forum Shell et commandes POSIX
    Réponses: 6
    Dernier message: 31/10/2008, 20h43
  5. Réponses: 3
    Dernier message: 20/01/2007, 20h36

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