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] Remplacement de caractères


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Par défaut [sed] Remplacement de caractères
    Bonjour,

    J'ai écrit un petit script pour remplacer les accent dans un fichier bibtex. Le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #! /bin/bash
     
    basepath=$PWD
    src=${basepath%%/}/$*
    dest=${basepath%%/}/latex_format.bib
    echo $src
    echo $dest
     
    sed -e s/é/"\\\'{e}"/g -e 's/è/\\`{e}/g' -e s/ç/"\\\c{c}"/g -e s/ö/"\\\"{o}"/g -e 's/à/\\`{a}/g' <$src >$dest
    Lorsque je teste ce script sur des petits fichiers, tout fonctionne pour le mieux. Dès que je veux l'utiliser sur mon vrai fichier (en pièce jointe) rien ne fonctionne. Qu'est ce qu'il se passe ?
    Merci
    (également, toute suggestion pour l'amélioration de ce script est la bienvenue, je suis débutant en bash...)
    Fichiers attachés Fichiers attachés

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    ah, ça marche pas ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre chevronné
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ah, ça marche pas ?
    Ça fonctionne chez toi ? Chez moi ça ne remplace rien du tout, ça ne fait que copier le fichier src.

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,

    Selon la locale utilisée, les caractères accentués ne sont pas encodés de la même façon.

    Donc, il faut que tu saches l'encodage de ton fichier et que tu utilises cet encodage pour la création de ton code sed.

    Une autre solution serait de repérer l'encodage en octal dans ton fichier source et d'utiliser la valeur octal sous sed, exemples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ cat ex.txt 
    é
    $ od -c ex.txt 
    0000000 303 251  \n
    0000003
    $ sed -n 'l' ex.txt 
    \303\251$
    $ sed -e 's/\o303\o251/E/g' ex.txt 
    E
    Ici, je suis en UTF8, et donc le caractère "é" est encodé en 2 octets qui sont en octal: 303 et 251.
    Les commandes od et sed -n "l" permettent d'avoir ces valeurs dans les fichiers.

  5. #5
    Membre chevronné
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Par défaut
    Arf... Je patauge un peu (ceci est un euphémisme). Déjà un bon point, disedorgue tu as raison, je faisais mes tests sur un encodage UTF-8 alors que le fichier qui m'intéressait est un fichier Occidental.

    Ok, je connais à présent le code octal de tous les caractères qui m'intéressent. Si j'ai bien compris, le code octal ne change pas d'un type d'encodage à un autre ? Je suis donc capable de substituer choucroute à mes accents pour un encodage UTF-8.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sed -e 's/\o303\o251/o134/g'\
     -e 's/\o303\o211/choucroute/g'\
     -e 's/\o303\o250/choucroute/g'\
     -e 's/\o303\o210/choucroute/g'\
     -e 's/\o303\o240/choucroute/g'\
     -e 's/\o303\o200/choucroute/g'\
     -e 's/\o303\o247/choucroute/g'\
     -e 's/\o303\o207/choucroute/g'\
     -e 's/\o303\o266/choucroute/g'\
     -e 's/\o303\o226/choucroute/g'\
    <$src >$dest
    Les correspondances octale-caractère-latex sont celles ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    \o303\o251-> é -> \'{e}
    \o303\o211 -> É -> \'{E}
    \o303\o250 -> è -> \`{e}
    \o303\o210 -> È -> \`{E}
    \o303\o240 -> à -> \`{a}
    \o303\o200 -> À -> \`{A}
    \o303\o247 -> ç -> \c{c}
    \o303\o207 -> Ç -> \c{C}
    \o303\o266 -> ö -> \"{o}
    \o303\o226 -> Ö -> \"{O}
    J'ai pas envie de remplacer toutes ces lettres par le mot choucroute (quelle surprise hein ?) Mais je suis incapable de faire cette substitution. Si je remplace ma choucroute par l'expression latex qui correspond à ma lettre accentuée, lorsque je regarde mon fichier avec un éditeur, c'est comme si rien n'avait changer.

    La notion d'encodage est quelque chose de nouveau pour moi, je dois louper des choses essentielles...

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Citation Envoyé par thecrazydonut Voir le message
    Arf... Je patauge un peu (ceci est un euphémisme). Déjà un bon point, disedorgue tu as raison, je faisais mes tests sur un encodage UTF-8 alors que le fichier qui m'intéressait est un fichier Occidental.

    Ok, je connais à présent le code octal de tous les caractères qui m'intéressent. Si j'ai bien compris, le code octal ne change pas d'un type d'encodage à un autre ? Je suis donc capable de substituer choucroute à mes accents pour un encodage UTF-8.

    Les correspondances octale-caractère-latex sont celles ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    \o303\o251-> é -> \'{e}
    \o303\o211 -> É -> \'{E}
    \o303\o250 -> è -> \`{e}
    \o303\o210 -> È -> \`{E}
    \o303\o240 -> à -> \`{a}
    \o303\o200 -> À -> \`{A}
    \o303\o247 -> ç -> \c{c}
    \o303\o207 -> Ç -> \c{C}
    \o303\o266 -> ö -> \"{o}
    \o303\o226 -> Ö -> \"{O}
    Si justement, les valeurs octal changent, c'est d'ailleurs pour cela que quand tu écris ton caractère accentuer pour ton sed (qui semble être de l'UTF8 pour toi), il n'est pas encodé comme dans ton fichier. L'idée de passer par le code octal, c'est juste pour ne pas avoir le souci de modifier la locale de son terminal pour écrire sa commande sed.
    Par exemple, l'encodage dans ton fichier en attachement est un ISO-8859 (et plus exactement semblerait être un ISO-8859-1 -voir sous wikipédia- )
    Donc si on prend par exemple le "é" son encodage octal correspond pour cette norme à \o351 alors qu'en UTF8 c'est bien \o303\o251.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    après quelques recherches, il semble qu'il est possible de conserver ses fichiers en UTF8 avec latex en utilisant \usepackage[utf8]{inputenc}...
    ?

    n'utilisant pas latex, je ne comprends pas du tout ce que je viens de suggérer. :/


    et pour info, ici, «ça marche pas», c'est, comme chez le médecin, dire : «j'suis malade»
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Sed : Remplacement de chaines par d'autres avec des caractères spéciaux
    Par argoet dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 28/09/2011, 12h50
  2. SED Remplacement du caractère . 'point'
    Par Fluxy dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 04/06/2007, 14h37
  3. [CR] Chercher et remplacer un caractère dans 1 chaine
    Par franck.cvitrans dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 29/09/2004, 16h42
  4. Fonction permettant de remplacer des caractères
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 06/09/2004, 15h48
  5. Remplacer un caractère
    Par Mvu dans le forum ASP
    Réponses: 5
    Dernier message: 20/07/2004, 09h57

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