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 et variables.


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 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 144
    Par défaut SED et variables.
    Bonjour,

    voila j'ai le fichier nb_toto_${DATE}.lst qui contient :

    nombre de bombons : |14565
    nombre de tonton : |57205

    dans mon script je traite ce fichier avec SED pour supprimer le pipe puis je redirige le résultat vers un autre fichier stat_titi_${DATE}.lst.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat ${TMPDIR}/nb_toto_${DATE}.lst|sed -e 's/|//g' >>  ${TMPDIR}/stat_titi_${DATE}.lst
    Je souhaiterais pouvoir ajouter a mes deux lignes ce qui est en rouge avant de redirigé mon fichier nb_toto_${DATE}.lst vers stat_titi_${DATE}.lst:

    nombre de bombons : |14565 (contre 14522)
    nombre de tonton : |57205 (contre 2546)



    SEd peut il insérer la valeur d'une variable déclarée du style sed -e a/$TATA sachant que a/ insérer du texte après la ligne.

    Merci

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    initialbombons=........... ;initialtontons=...........; sed '
    s/|//g
    1a\
    contre\ \('$initialbombons'\)
    3a\
    contre\ \('$initialtontons'\)
    ' ${TMPDIR}/nb_toto_${DATE}.lst >> ${TMPDIR}/stat_titi_${DATE}.lst
    attention ici je force les numero de lignes 1 et 2 pour toi c'est peut etre different ou si tu sais pas à l'avance tu fais une recherche de pattern
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /patern/$i\
    truc à inserer
    autre chose aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SIUNIXS2:root # cat > /tmp/FP
    nombre de bombons : |14565
    nombre de tonton : |57205
    SIUNIXS2:root # sed '
    > s/|//g
    > 1a\
    > toto
    > 2a\
    > titi' /tmp/FP
    nombre de bombons : 14565
    toto
    nombre de tonton : 57205
    titi
    SIUNIXS2:root #
    append et insert fonctionnent sur des lignes completes

    si tu veux ajouter en fin de ligne
    il vaut mieux faire un substitude sur $

    /recherche_champ/s/.*$/&valeur/

    comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SIUNIXS2:root # sed ' s/|//g
    > /bombons/s/.*$/&\ tutu/
    > /tonton/s/.*$/&\ toto/' /tmp/FP
    nombre de bombons : 14565 tutu
    nombre de tonton : 57205 toto
    SIUNIXS2:root #

  3. #3
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 144
    Par défaut
    Merci pour les infos super sympa.

    Bon j'ai essayé avec SED mais je m'arrache les cheveux bon allez je met carte sur table car la cela fait trois jours que je cherche la solution et je ne trouve pas :

    Tout d'abord voila une portion du script en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if [ -f "${TMPDIR}/nb_toto_${DATE}.lst" ]
    then
        echo 'nombre de votes simples et doubles au '${DATE} >> ${TMPDIR}/stat_site_${DATE}.lst
    	cat ${TMPDIR}/nb_toto_${DATE}.lst|sed -e 's/|//g' >> ${TMPDIR}/stat_site_${DATE}.lst 
    fi
    le fichier nb_toto_${DATE}.lst contient :
    nombre de vote simple : | 125455
    nombre de vote double : | 25645

    Ce que je souhaite faire c'est tout les mois recevoir le contenu de ce fichier mais je souhaite ajouter les stats du mois dernier du style et le tout que je redirige vers le fichier stat_site_${DATE}.lst :

    nombre de vote simple : 125455 (contre 115644 en Avril)
    nombre de vote double : 25645 (contre 24968 en Avril)

    J'y suis arrivé pour le fichier ci-dessous car il contient qu'un chiffre:
    2564452

    Voila ce que j'ai fait et cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if [ -f "${TMPDIR}/nb_abonnement_${DATE}.lst" ]
    then
    	ABO=`cat ${TMPDIR}/nb_abonnement_${DATE}.lst`
            cp -f ${TMPDIR}/nb_abonnement_${DATE}.lst     ${TMPDIR}/nb_abonnement_old.lst
            ABOHOLD=`cat ${TMPDIR}/nb_abonnement_old.lst`
            echo 'Au '${DATE} ': il y a '${ABO}' abonnements (contre '${ABOHOLD}' en '${DATESOLD}') ' >>  ${TMPDIR}/stat_site_${DATE}.lst 
    fi
    Avez vous une idée ?

    Merci

  4. #4
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 144
    Par défaut
    Bonjour,

    voila une partie de mon script shell mais j'ai une erreur de synthaxe SED :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if [ -f "${TMPDIR}/nb_votes_${DATE}.lst" ] 
    then 
    CONFI="$(sed -n '1p' ${TMPDIR}/nb_votes_old.lst)" 
    SIMPL="$(sed -n '2p' ${TMPDIR}/nb_votes_old.lst)" 
    echo 'nombre de votes simples et doubles au '${DATE} >> ${TMPDIR}/stat_${DATE}.lst 
    cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e 's/|//g;1 {s/.*/& (contre $CONFI en $DATEOLD)/};2 {s/.*/& (contre $SIMPL en $DATEOLD)/}' >> ${TMPDIR}/stat_${DATE}.lst 
    cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e 's/[^[:digit:]]//g' > ${TMPDIR}/nb_votes_old.lst 
     
    else 
    echo 'error' | mail -s "statistiques votes: nombre de votes simples et doubles le ${DATE}" toto@toto.fr 
    fi
    je lance mon script et voila l'erreur que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed: -e expression #1, char 46: Unknown option to 's'
    Avez vous une idée?

    Merci encore

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    je reprends ce qui a été proposé : tu as juste oublié de déquoter les variables shell utilisées dans le sed
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [tmp]# 
    [tmp]# cat > FP 
    nombre de vote simple : | 125455
    nombre de vote double : | 25645
    CONFI=0000
    [tmp]# DATEOLD=1111
    [tmp]# SIMPL=2222
    [tmp]# sed -e 's/|//g;1 {s/.*/& (contre '"${CONFI}"' en '"${DATEOLD}"')/};2 {s/.*/& (contre '"${SIMPL}"')/}' FP
    nombre de vote simple :  125455 (contre 0000 en 1111)
    nombre de vote double :  25645 (contre 2222)
    [tmp]# rm FP

  6. #6
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 144
    Par défaut
    Voila j'ai suivi tes instructions dans mon script shell :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if [ -f "${TMPDIR}/nb_votes_${DATE}.lst" ]
    then
        CONFI="$(sed -n '1p' ${TMPDIR}/nb_votes_old.lst)"
        SIMPL="$(sed -n '2p' ${TMPDIR}/nb_votes_old.lst)"
    	echo 'nombre de vote simple et doubles au '${DATE} >> ${TMPDIR}/stat_${DATE}.lst
    	cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e 's/|//g;1 {s/.*/& (contre '"${CONFI}"' en '"${DATEOLD}"')/};2 {s/.*/& (contre '"${SIMPL}"' en '"${DATEOLD}"')/}' >> ${TMPDIR}/stat_${DATE}.lst 
    	cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e 's/[^[:digit:]]//g' > ${TMPDIR}/nb_votes_old.lst
    mais quand je l'execute j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed: -e expression #1, char 37: Unknown option to 's'
    Merci encore

  7. #7
    Invité
    Invité(e)
    Par défaut ed
    Bonjour,

    Je ne pratique plus depuis un moment mais ne serait-ce pas plus lisible avec "ed" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SIMPLES=...
    DOUBLES=...
     
    cp nb_toto_${DATE}.lst stat_titi_${DATE}.lst
     
    ed - "stat_titi_${DATE}.lst" << !
    ,s/|//g
    1s/$/$SIMPLES/
    2s/$/$DOUBLES/
    w
    q
    !

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

Discussions similaires

  1. Utilisation de la commande sed avec variable
    Par elfide dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 09/12/2011, 17h56
  2. Sed et variable
    Par lavazavio dans le forum Linux
    Réponses: 4
    Dernier message: 15/09/2011, 14h16
  3. Sed et variables
    Par danathane dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 26/05/2011, 18h21
  4. [QST] sed et variable
    Par hannibal.76 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 25/04/2011, 11h40
  5. Substitution sed avec variables
    Par zekounnet dans le forum Linux
    Réponses: 0
    Dernier message: 29/11/2008, 13h16

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