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 :

bash sed question


Sujet :

Shell et commandes GNU

  1. #1
    Membre habitué Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Points : 130
    Points
    130
    Par défaut bash sed question
    Bonjour,

    J'ai créé un script bash qui requête avec ldapsearch. Je cherche à coloriser une partie du résultat. J'ai donc déclaré une expression à trouver, il trouve cette expression, mais lorsque avec sed je lui demande de le coloriser il affiche l'expression recherchée sous sa forme de variable dans la couleur demandée et non le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ou=$(echo -e "ou=.*groups")
    oucol=$(echo -e $yel$ou$norm)
     
    echo -e "\n$content" | sed -e "s/$ou/$oucol/g"
    Du coup ca affiche "ou=.*groups" colorisé par pas la valeur.

    J'ai cherché, je suis sur qu'en 2 secondes vous allez trouver, merci d'avance.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 778
    Points
    30 778
    Par défaut
    En fait, c'est peut-être ça que tu veux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo -e "\n$content" | sed -e "s/\(${ou}\)/${yel}\1${norm}/g"
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    Bonjour,
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ var="b c d
    b a c d
    baaab"
    $ v="a"
    $ r=z${v}z
    $ echo "${var//$v/$r}"
    b c d
    b zaz c d
    bzazzazzazb
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre habitué Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Points : 130
    Points
    130
    Par défaut
    Merci pour vos réponses, je pourrais tester lundi ($1 a déjà été utilisé avant en paramètre de la commande)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    $1 a déjà été utilisé avant en paramètre de la commande
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre habitué Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    En fait, c'est peut-être ça que tu veux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo -e "\n$content" | sed -e "s/\(${ou}\)/${yel}\1${norm}/g"
    Merci c'est l'expression entre parenthèse et le \1 qui ont résolu le pb et aussi que j'ai changé ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    yel="\033[33m" en yel=$(echo -e "\033[33m")
    Je ne sais pas comment j'aurais fait pour trouver.
    Je ne passe pas tout de suite en résolu, une ou deux choses à vérifier avant

  7. #7
    Membre habitué Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    En fait je voulais dire que j'ai ça en début : if [ -z $1 ], c'est le nom de groupe que je cherche dans ldap et que j'écris après le nom de mon script.
    Alors je pensais que ça pouvais interférer.

  8. #8
    Membre habitué Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $ v="a"
    $ r=z${v}z
    $ echo "${var//$v/$r}"
    Ca marche aussi, merci.

  9. #9
    Membre habitué Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Points : 130
    Points
    130
    Par défaut --color=auto
    Il y a une chose dommage c'est que quand je saisie ma requête directement dans la console bash la colorisation de la chaîne recherchés se fait automatiquement, pas en sortie du script, et même si je rajoute --color=auto dans le script en fin du $content , vous auriez une idée du pourquoi? C'est plein de subtilités la console!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut

    mais de quoi tu parles ?

    tu demandes au shell de dire au terminal de mettre de la couleur : la couleur est affichée !
    il n'existe pas d'option --color pour toutes les commandes.
    et tu pourrais avoir un fichier --color, ls ne coloriserais pas pour autant sa sortie.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre habitué Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par N_BaH Voir le message

    mais de quoi tu parles ?

    tu demandes au shell de dire au terminal de mettre de la couleur : la couleur est affichée !
    il n'existe pas d'option --color pour toutes les commandes.
    et tu pourrais avoir un fichier --color, ls ne coloriserais pas pour autant sa sortie.
    A ok je comprend, la couleur est affichée par le terminal mais pas en "sortie". Merci. Donc l'option s'adresse au terminal ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    comme je te l'ai dit, toutes les commandes n'ont pas d'option --color.

    quel terminal utilises-tu ? qu'en dit le man ?

    mais si tu définis une colorisation c'est pour qu'elle soit affichée.
    si tu ne veux pas de couleurs, alors n'en définit pas !

    il faut que tu expliques
    quand je saisie ma requête directement dans la console bash la colorisation de la chaîne recherchés se fait automatiquement, pas en sortie du script
    quelles commandes tapes-tu ?
    copie/colle (ne fait pas de capture d'écran) les commandes et la sortie.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre habitué Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    comme je te l'ai dit, toutes les commandes n'ont pas d'option --color.

    quel terminal utilises-tu ? qu'en dit le man ?

    mais si tu définis une colorisation c'est pour qu'elle soit affichée.
    si tu ne veux pas de couleurs, alors n'en définit pas !

    il faut que tu expliquesquelles commandes tapes-tu ?
    copie/colle (ne fait pas de capture d'écran) les commandes et la sortie.
    Le script fonctionne te rassure, c'est surtout pour comprendre. La couleur aide beaucoup pour visualiser ce que j'aurais à faire ensuite.
    Le terminal est Terminator

    Commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ldapsearch -vxD uid=MONLOGIN,ou=people,dc=calibre,dc=DOMAIN,dc=fr -y ~/scripts/.pw dn | grep  groups | grep 'dn: ' | grep -i  ppi
    Sortie :
    ------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ldap_initialize( <DEFAULT> )
    filter: (objectclass=*)
    requesting: dn 
    dn: cn=rd-pj-ppi-m,ou=rd,ou=groups,dc=calibre,dc=DOMAIN,dc=fr
    dn: cn=rd-pj-ppi-l,ou=rd,ou=groups,dc=calibre,dc=DOMAIN,dc=fr
    dn: cn=rd-pj-archives_notes_ppi-l,ou=rd,ou=groups,dc=calibre,dc=DOMAIN,dc=fr
    dn: cn=rd-pj-archives_notes_ppi-m,ou=rd,ou=groups,dc=calibre,dc=DOMAIN,dc=fr
    La sortie est en couleur (rouge, juste ce qui correspond au dernier grep) c'est défini dans mon .bashrc par défaut, et ailleurs peut-être.


    Mais dès que j'utilise la même commande en exécutant le script ( ./mon_srcipt ppi) je n'ai plus la couleur. Je dois passer une moulinette
    Pour "ou=0*groups" c'est un autre sujet, je n'arrivais pas à coloriser cette expression, ça m'affichait l'expression en couleur et pas le résultat en couleur.

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    effectivement, les scripts ne lisent pas ~/.bashrc, donc tu perds les alias.

    par défaut, bash (contrairement à dash) ne permet pas l'emploi d'alias dans les scripts.
    il faut redéfinir l'option expand_aliases de shopt au début du script : shopt -s expand_aliases, et refaire l'alias :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alias grep='grep --color=auto'
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Membre habitué Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Points : 130
    Points
    130
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ shopt | grep expand_
    expand_aliases 	on
    Le terminal en bash, accepte les aliases du bashrc, pas le script, aucun de mes alias n'est interprété, même écrits en dur dans le script avec le set de shopt écrit comme ci dessus.

  16. #16
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Personnellement, pour moi, l'exemple ci-dessous fonctionne:
    Le script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ cat tt.sh
    #/usr/bin/bash
    shopt -s expand_aliases
    alias ls='ls -gG'
    ls
    Son exécution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ ./tt.sh
    total 36
    drwx------. 2 16384 Dec 28  2016 lost+found
    drwx------  2  4096 Sep 12 11:06 ii-hTPjowS5OW
    drwx------  2  4096 Sep 12 11:35 ii-MtGMHVXuSB
    drwx------  3  4096 Jul 27 14:08 ii-qdOC3T
    drwx------  3  4096 Jul 27 14:08 ii-W4XO1t
    -rwx------  1    60 Sep 12 15:30 tt.sh
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
     
    alias l_Alias="echo \"l'alias est exécuté\""
    alias # pour afficher les alias
     
    shopt | grep alias
    l_Alias
     
    shopt -s expand_aliases
     
    shopt | grep alias
    l_Alias
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ ./monScript 
    alias l_Alias='echo "l'\''alias est exécuté"'
    expand_aliases 	off
    ./monScript: ligne 8: l_Alias : commande introuvable
    expand_aliases 	on
    l'alias est exécuté
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  18. #18
    Membre habitué Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Points : 130
    Points
    130
    Par défaut
    Tu as raison ca fonctionne. Mais pas en sortie de la commande ldapsearch exécutée depuis le sript.
    Ce n'est pas très important car je colorise avec du code mais j'aurais aimé comprendre
    Merci pour tes posts.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    Ce n'est pas très important
    euh, quand même, un peu !
    parce qu'une chose qui ne fait pas ce qu'elle est censée faire, et qui t'oblige à ajouter du code, ce n'est déjà pas normal, alors on ne parle pas d'optimisation !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash
     
    shopt -s expand_aliases
    alias grep='/bin/grep --color=auto'
    mimic_ldapSearch  () {
       echo "ldap_initialize( <DEFAULT> )
    filter: (objectclass=*)
    requesting: dn" >&2
       echo "dn: cn=rd-pj-ppi-m,ou=rd,ou=groups,dc=calibre,dc=DOMAIN,dc=fr
    dn: cn=rd-pj-ppi-l,ou=rd,ou=groups,dc=calibre,dc=DOMAIN,dc=fr
    dn: cn=rd-pj-archives_notes_ppi-l,ou=rd,ou=groups,dc=calibre,dc=DOMAIN,dc=fr
    dn: cn=rd-pj-archives_notes_ppi-m,ou=rd,ou=groups,dc=calibre,dc=DOMAIN,dc=fr"
    }
    mimic_ldapSearch | grep  groups | grep 'dn: ' | grep -i  ppi
    et, en sortie, j'ai bien tous les ppi colorés.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  20. #20
    Membre habitué Avatar de gadj0dil0
    Profil pro
    Support technique
    Inscrit en
    Février 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Support technique

    Informations forums :
    Inscription : Février 2007
    Messages : 133
    Points : 130
    Points
    130
    Par défaut
    Je viens de comprendre avec ton exemple, si le grep est dans la variable ca ne fonctionne pas
    si la variable (ma requete ldap) reste brute (sans le grep ppi) puis est grepée au moment de echo ca fonctionne.

    Merci pour shopt et le reste je vais clore le sujet.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Variable persistante (bash, sed)
    Par fransoo dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 19/02/2017, 22h53
  2. Réponses: 0
    Dernier message: 05/06/2014, 13h03
  3. script bash SED
    Par alex_2009 dans le forum Linux
    Réponses: 5
    Dernier message: 22/06/2009, 05h22
  4. Poser une question en bash ?
    Par byloute dans le forum Linux
    Réponses: 5
    Dernier message: 04/10/2005, 15h02
  5. Script bash : Pb avec sed
    Par fred64 dans le forum Linux
    Réponses: 3
    Dernier message: 19/08/2005, 12h24

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