Forum Programmation.shell Transformation de caractères ...

Posté par  (site web personnel) .
Étiquettes : aucune
0
12
oct.
2005
Bonjour à tous,

Je souhaite dans un script bash, transformer tous les caractères accentués par leur équivalents sans accents.

Je m'explique par l'exemple ...

Transformer stéphane en stephane
Transformer ève en eve
Transformer âêîôû en aeiou
Transformer äëïöü en aeiou

Existe t'il déjà un utilitaire qui fais ça ?

A++
  • # tr

    Posté par  (site web personnel, Mastodon) . Évalué à 5.

    echo "mon super texte avec plein d'accents comme : à é è ü ...." | tr "àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ" "aceeeeiioouuACEEEEIIOOUU"
    M.
    • [^] # Re: tr

      Posté par  (site web personnel) . Évalué à 1.

      Merci à toi kolter, ça marche correctement ...

      A++
    • [^] # Re: tr

      Posté par  (site web personnel) . Évalué à 1.

      Euh ...

      kolter,

      En fait je cherche une expression régulière équivalente à ce que tu viens de me donner avec l'utilitaire externe 'tr' qui soit utilisable avec awk, et en plus je repasse toutes les strings en minuscules à la volée et je remplace les espaces par un tiret (-) ...

      genre (fichier d'entrée délimité par virgule) :

      Nom du fichier : in.csv

      Contenu du fichier (Prénon,NOM) :

      éssai,ÉSSAI

      Commande de reformatage awk :

      awk -F , '{print tolower($2)"."tolower($1)",password,domaine.dom,"$1","$2}' in.csv
      | |
      ici -------------------------------- et ici -----

      Comme tu peux le voir le passage en minuscules ne pose pas de problèmes dans mon exemple, par contre je ne connais pas la regexp que je peux utiliser pour transformer tous les caractères accentués par leur équivalents sans accents et remplacer les espaces par des tirets.

      Et même, en fait, je ne sais pas si c'est faisable dirrectement avec awk ...

      Il faut également savoir qu'il vas y avoir d'autres champs que je vais formatter à la suite (nom.prenom,password,domain.dom,Prénom,NOM) ...

      Une idée ?
      • [^] # Re: tr

        Posté par  . Évalué à 2.

        function toto(a)
        {
        gsub(/é/, "e",a) ;
        gsub(/è/, "e",a) ;
        .....
        return a ;
        }
        • [^] # Re: tr

          Posté par  . Évalué à 2.

          sinon tu fais


          cat in.csv | tr 'blabla' 'blabla' | awk'{ blabla }'
          • [^] # Re: tr

            Posté par  (site web personnel) . Évalué à 2.

            Je tiens a précisé un truc:
            pour que toutes les solutions données ici fonctionnent il faut que
            la locale utilisée pour créer les fichiers a traiter soit la meme que celle
            utilisée pour créer le script de conversion.

            Sinon cela n'aura au mieux aucun effet, au pire des effets de bords non voulus.
            Malheureusement il est impossible de programmer une fonction suffisament
            intelligente pour 'enlever les accents' de toutes les langues.
  • # Problème résolu ...

    Posté par  (site web personnel) . Évalué à 1.

    Tout d'abord merci à tous !

    Voilà comment j'ai fini par résoudre mon problème :


    cat $1 | while read line
    do
    accfirstname=$(echo $line | cut -f1 -d','\
    |tr "àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ " "aceeeeiioouuACEEEEIIOOUU-"\
    |awk '{print tolower($0)}')
    acclastname=$(echo $line | cut -f2 -d','\
    |tr "àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ " "aceeeeiioouuACEEEEIIOOUU-"\
    |awk '{print tolower($0)}')
    password="password"
    domain="$2"
    firstname=$(echo $line | cut -f1 -d',')
    lastname=$(echo $line | cut -f2 -d',')
    echo "$acclastname.$accfirstname,$password,$domain,$firstname,$lastname"
    done


    Le fichier d'entrée contient par exemple :

    Prénom,NOM QUI PEUT AVOIR DES ACCENTS ET DES ESPACE

    les paramètres du script sont :

    filename domaine.dom

    Je pense qu'utiliser la puissance de awk aurait été plus élégant (notament l'exemple de function awk donné par snt), mais je suis trop null pour l'utiliser :-(

    Voilà c'était mon message du jour ...

    A++

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.