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

Linux Discussion :

script bash SED


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut script bash SED
    Bonjour à tous,

    j'aimerai traiter un fichier qui s'écrit de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    champA='  commentaire  '        --> ligne 1
    champB='  commentaire  '        --> ligne 2
    etc ...
    le but serait en fait de rajouter une quote ' devant chaque quote présente dans le commentaire.

    Ce traitement devant être fait pour chaque ligne, j'avais pensé à utiliser SED de la manière suivante :

    sed '/champ/ s/\'/\'\'/g' fichier.txt --> je fais un traitement pour chaque ligne contenant le motif "champ", en substituant ' par ' '
    le problème est que je ne voudrai pas qu'il le fasse pour la première et la dernière quote (qui délimite le commentaire).


    Faut t'il que je fasse plutot un traitement de cette manière ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cat FICHIER | while read ligne
    do
    echo "$ligne" | grep "champ" | cut -c ??? `  sed s/\'/\'\'/g
    done
    le problème ici est que je ne sait pas à quel position "cutter" le commentaire de chaque ligne afin de faire un sed dessus pour remplacer les ' par ' ' (champ et commentaire étant des chaines de caractères à longueur variable)

    quelqun pourrai t'il m'aider dans l'une ou l'autre de mes solutions ? à moins qu'il y'a plus simple pour traiter ce problème.


    Merci )

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cat alex_2009.txt
    champA='commentaire'
    champB='commentaire'
    sed -n "s/=\('[^']*\)/='\1'/p" alex_2009.txt
    champA=''commentaire''
    champB=''commentaire''
    ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cat alex_2009.txt
    champA='commentaire'
    champB='commentaire'
    sed -n "s/=\('[^']*\)/='\1'/p" alex_2009.txt
    champA=''commentaire''
    champB=''commentaire''
    ?

    comme cela en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cat alex_2009.txt
    smtp_object='mail d'aujourd'hui'
    j'aimerai obtenir en sortir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    smtp_object='mail d''aujourd''hui'
    --> doubler la quote si présente à l'intérieur des ' '

    (en fait je dois importer ce fichier dans un logiciel qui ne récupère pas la valeur entre quote, ici mail d'aujourd'hui si il y'a des quote dedans --> la neutralisation de la quote s'effectuant en mettant une quote devant avec ce logiciel)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    et tu es obligé d'utiliser mail d'aujourd'hui ?
    pourquoi pas mail de ce jour, ou mail du jour ?

    essaye ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "smtp_object='mail d'aujourd'hui'" | sed "s/'/''/g; s/''$/'/; s/=''/='/"
    smtp_object='mail d''aujourd''hui'
    ?
    mais je trouve ça lourdingue...

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    bah en fait c'est un exemple , le fichier a d'autre donnée entre les quote. je dois juste récupérer les informations dans un logiciel et pour cela je suis obligé de rajouter une double quote pour neutraliser la quote lors de l'import dans ce logiciel afin de ne pas dénaturer l'information.

    Quelqun a une idée ?

    j'avais pensé à cutter cette information entre quote afin de faire le sed ensuite mais je sais toujours pas comment cutter cette information (finalement je dois faire un cut à partir de la première quote rencontré jusqu'a celle en fin de ligne :


    --> [ debut ligne] champ= ' INFORMATION CONTENANT DES QUOTE ' [fin ligne]

    comment cutter INFORMATION CONTENANT DES QUOTE sur cette ligne ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    C'est bien, comme ça tu verras comment utiliser les expressions gourmandes et non-gourmandes de sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "champ= 'IN'FORMATION CONTE'NANT DES ' '" | sed "s/[^']*'\(.*\)'$/\1/; s/'/''/g"
     IN''FORMATION CONTE''NANT DES ''

Discussions similaires

  1. Commande grep/sed dans script bash avec regex
    Par 1r2R1 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 02/04/2014, 17h49
  2. Script Bash commande sed non prise en compte
    Par wesswessa dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 16/10/2013, 15h21
  3. sed, script bash ou autre pour trier un fichier
    Par jane40 dans le forum Linux
    Réponses: 6
    Dernier message: 30/01/2012, 15h28
  4. Script bash - besoin d'aide avec sed & awk
    Par Obiwan31 dans le forum Unix
    Réponses: 1
    Dernier message: 23/04/2010, 11h11
  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