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 :

supprimer des accents (script bash)


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Points : 109
    Points
    109
    Par défaut supprimer des accents (script bash)
    Bonjour à tous,
    voilà je cherche à supprimer les accents dans un de mes scripts en bash:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    [...]
    for image in *[jJ][pP][gG] ;
    do
    width=$(identify -format '%w' "$image")
    height=$(identify -format '%h' "$image")
    ratio=$(echo "scale=2; $height / $width" |bc)
    echo $ratio
    if [ $ratio '<' .70 ]
     then
    	image="${image##*/}"
    	nv_nom=$(printf '%s_%s_%s\n' ${rep} ${jourmois} $image)
    	convert "$image" -resize 601x400 -strip -interlace line -quality 80 "$NV_DOSSIER/$nv_nom"
    	composite -gravity center /home/sacha/Images/cadre.png "$NV_DOSSIER/$nv_nom" "$NV_DOSSIER/$nv_nom"
     else
    	nv_nom=$(printf 'thai_prod_%s_%s.jpg\n' ${rep} ${jourmois})
    
    	convert "$image" -resize 200x150 -strip -interlace line -quality 80 "$NV_DOSSIER/$nv_nom"
    	composite -gravity center /home/Images/cadremini.png "$NV_DOSSIER/$nv_nom" "$NV_DOSSIER/$nv_nom"
     fi
    done 
    [...]
    Je cherche donc à supprimer les accents dans la variable nv_nom

    J'ai essayer avec tr mais sans succès

    Merco à vous

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 480
    Points
    19 480
    Par défaut
    bonjour,

    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (( $(bc <<<"$ratio < .70") ))
    then image="${image##*/}"
         printf -v nv_nom '%s_%s_%s' ${rep} ${jourmois} $image
         nv_nom="${nv_nom//[éèàù]/}"
    [...]
    ...
    ?

  3. #3
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    il existe un très bon outil : unaccent

    Sinon, avec sed, ca marche aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $nv_name | sed 'y/áàâäçéèêëîïìôöóùúüñÂÀÄÇÉÈÊËÎÏÔÖÙÜÑ/aaaaceeeeiiiooouuunAAACEEEEIIOOUUN/'
    (J'en ai peut-être oublié )

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Points : 109
    Points
    109
    Par défaut
    Merci pour vos réponse.

    Je tente les deux mais ni l'un ni l'autre ne fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         printf -v nv_nom '%s_%s_%s' ${rep} ${jourmois} $image
         nv_nom="${nv_nom//[éèàù]/}"
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	image="${image##*/}"
    	nv_nom=$(printf '%s_%s_%s\n' ${rep} ${jourmois} $image )
    	nv_nom= `echo $nv_nom | sed 'y/áàâäçéèêëîïìôöóùúüñÂÀÄÇÉÈÊËÎÏÔÖÙÜÑ/aaaaceeeeiiiooouuunAAACEEEEIIOOUUN/'`
    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	image="${image##*/}"
    	nv_nom=$(printf '%s_%s_%s\n' ${rep} ${jourmois} $image )
    	nv_nom= `echo $nv_nom | \ tr '[A-Z]' '[a-z]' | \ tr '[àâäéèêëîïôöùûü]' '[aaaeeeeiioouuu]' `
    P.S: je vous joins le code en entirer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #!/bin/bash
    # Nom du nouveau répertoire
    NV_DOSSIER=reduc
     
    echo 'dossier'
    echo $1
    cd "$1"
     
    # Création du nouveau dossier s'il n'existe pas
    if [ -d $NV_DOSSIER ] ;
    then
    echo "Le dossier reduc existe déjÃ*"
    else
    mkdir $NV_DOSSIER
    fi
    rep=$(pwd)
    jourmois=$(date +'%d%m')
    rep="${rep##*/}"
    rep="${rep// /-}"
     
     
    # Pour toutes les photos (JPG) du répertoire
    for image in *[jJ][pP][gG] ;
    do
    width=$(identify -format '%w' "$image")
    height=$(identify -format '%h' "$image")
    ratio=$(echo "scale=2; $height / $width" |bc)
    echo $ratio
     
    	if [ $ratio '<' .70 ]
    	then
    			image="${image##*/}"
    		nv_nom=$(printf '%s_%s_%s\n' ${rep} ${jourmois} $image )
    		nv_nom= `echo $nv_nom | \ tr '[A-Z]' '[a-z]' | \ tr '[àâäéèêëîïôöùûü]' '[aaaeeeeiioouuu]' `
     
    		# Réduit l'image en 601x400
    		convert "$image" -resize 601x400 -strip -interlace line -quality 80 "$NV_DOSSIER/$nv_nom" | sed -e 'y/éêèàï/eeeai/'
    		# fusione l'image avec un calque contenant les coins
    		composite -gravity center /home/sacha/Images/cadre.png "$NV_DOSSIER/$nv_nom" "$NV_DOSSIER/$nv_nom"
    		# fin de la boucle FOR
    	else
    		nv_nom=$(printf 'thai_prod_%s_%s.jpg\n' ${rep} ${jourmois}) 
     
    		# Réduit l'image en 601x400
    		convert "$image" -resize 200x150 -strip -interlace line -quality 80 "$NV_DOSSIER/$nv_nom"
    		# fusione l'image avec un calque contenant les coins
    		composite -gravity center /home/sacha/Images/cadremini.png "$NV_DOSSIER/$nv_nom" "$NV_DOSSIER/$nv_nom"
    	fi
    done 
    echo '-Fini !!!'
    exit

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 480
    Points
    19 480
    Par défaut
    bof, la solution sed fonctionne, peut-être l'espace laiséé après le =
    ...
    ?

  6. #6
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Points : 109
    Points
    109
    Par défaut problème d'encodage
    En postant ma réponse j'ai vu que dans mon code j'avais des problème d'accent.
    Et c'est comme cela que j'ai trouver la soluce.
    mon fichier etait encodé en iso, je l'ai passé en UTF8, récris tout les accent et c'est bon.

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

Discussions similaires

  1. Supprimer des accents ?
    Par Seneg33 dans le forum QlikView
    Réponses: 2
    Dernier message: 16/05/2012, 16h04
  2. Supprimer les accents des lettre
    Par cortex024 dans le forum C#
    Réponses: 11
    Dernier message: 08/12/2011, 18h29
  3. écrire un script bash avec des paramètres -r, -a
    Par Balbuzard dans le forum Linux
    Réponses: 4
    Dernier message: 17/12/2009, 14h03
  4. Script permettant de supprimer des fichiers
    Par topino dans le forum VBScript
    Réponses: 1
    Dernier message: 20/03/2008, 11h24
  5. Réponses: 1
    Dernier message: 09/02/2007, 23h51

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