[unix script] chaines & mots pour delimiteurs

watch3r Messages postés 2 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
bonjour à tous,

dans un script unix, j'ai besoin de supprimer le début et la fin d'une chaine de caractères.

- une variable chaine contient la chaîne à manipuler :
chaine="EXPRESSION A SUPPRIMER des caractères et des espaces que je conserve MOT_CLE avec des mots à supprimer"
- une variable expression contient la chaîne à supprimer en début de chaîne, avec des caractères et des espaces :
expression="EXPRESSION A SUPPRIMER"
- la chaîne de caractères MOT_CLE est une constante

comment transformer, en script unix, la chaîne
"EXPRESSION A SUPPRIMER des caractères et des espaces que je conserve MOT_CLE avec des mots à supprimer"
en
"des caractères et des espaces que je conserve"

merci par avance à tous pour votre aide
Configuration: Mac OS X
Safari 419.3

4 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    $ chaine="EXPRESSION A SUPPRIMER des caractères et des espaces que je conserve MOT_CLE avec des mots à supprimer"
    
    $ new_chaine=$(echo ${chaine//EXPRESSION A SUPPRIMER }) && echo ${new_chaine// MOT_CLE*}
    
    des caractères et des espaces que je conserve
    
    $
    ;-))
    0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    pour s'amuser
    $ echo $chaine
    EXPRESSION A SUPPRIMER des caractères et des espaces que je conserve MOT_CLE avec des mots à supprimer
    $ echo $chaine | sed -r 's/EXPRESSION A SUPPRIMER (.*) MOT_CLE.*/\1/'
    des caractères et des espaces que je conserve
    maintenant si tu veux une solution fiable, soit un peu plus précis
    C'est impératif de savoir la chaine à traiter pour donner une solution fiable.
    0
  3. watch3r Messages postés 2 Statut Membre
     
    merci pour vos retours hyper rapides ! chapeau bas !!

    je récupère une string tmpDescription qui a cette forme :
    "LE NOM DU SITE la description du site DESCRIPTIF ACCES à nouveau le descriptif de l'accès au site"

    cette chaîne tmpDescription reprend des éléments à supprimer :
    - la variable $reference1 contient déja "LE NOM DU SITE"
    - la chaîne "DESCRIPTIF ACCES" est fixe dans toutes les lignes du fichier csv que je traite

    je dois donc transformer dans le script ci-dessous le contenu de la variable
    tmpDescription = "LE NOM DU SITE la description du site DESCRIPTIF ACCES à nouveau le descriptif de l'accès au site"
    en
    description = "la description du site"

    pour celà je pense :
    1 - supprimer le début de la chaîne tmpDescription en utilisant la variable $reference1 qui vaut déjà "LE NOM DU SITE"
    2 - supprimer la fin de la chaîne tmpDescription à partir de l'expression récurrente "DESCRIPTIF ACCES"

    je vous livre mon script qui tourne sous mac os x :

    #chemin relatif du fichier recupere
    ficwin="./windows.csv"

    #chemin relatif du fichier csv en format utf-8
    utf8="./utf-8.csv"

    #chemin relatif du fichier keynote
    keynote="./keynote.out"

    #on convertit le fichier en utf-8 et on le stocke dans un nouveau fichier utf-8.csv
    iconv -f ISO-8859-15 -t UTF-8 $ficwin >$utf8

    #on parse le fichier csv et on renseigne les variables
    cat $utf8 | while read ligne; do
    reference1=`echo "$ligne" | cut -d ';' -f 1,1 |sed 's/\"^*//' |sed 's/\"//'`
    reference2=`echo "$ligne" | cut -d ';' -f 11,11 |sed 's/\"^*//' |sed 's/\"//'`
    reference3=`echo "$ligne" | cut -d ';' -f 13,13 |sed 's/\"^*//' |sed 's/\"//'`
    tmpDescription=`echo "$ligne" | cut -d ';' -f 18,18 |sed 's/\"^*//'`
    description=???????????????????
    done

    merci encore une fois d'avance pour votre aide.
    0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    $ echo ${tmpDescription}
    
    LE NOM DU SITE la description du site DESCRIPTIF ACCES à nouveau le descriptif de l'accès au site
    
    $ echo $ref1
    
    LE NOM DU SITE
    
    $ echo $ref2
    
    DESCRIPTIF
    
    $ echo ${tmpDescription} | sed -r "s/$ref1(.*)$ref2.*/\1/"
    
    la description du site
    
    $ 
    Merci lami20j ;-))

    Mais aussi :
    $ description=$(new=$(echo ${tmpDescription//$ref1}) && echo ${new//$ref2*})
    
    $ echo $description
    
    la description du site
    
    $   
    ;-))
    0