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 dans des blocs de commentaires


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    ingénieur
    Inscrit en
    Novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 165
    Par défaut [sed] Remplacement dans des blocs de commentaires
    Bonjour à tous,

    j'ai un script à écrire qui regarde dans des fichiers de code C pour modifier les blocs de commentaires:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      /* vous \340 vous */
    printf("bonjour \340 vous");
    devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      /* bonjour à vous */
    printf("bonjour \340 vous");
    J'ai tenté des choses du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i 's+$[ \t]*/\*.\340.+$[ \t]*/\*.à.+g' $mon_fichier
    (plus un milliard d'autres essais) mais absolument rien de fonctionne :/

    Des idées svp?

  2. #2
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Bonjour,

    Quelque chose comme ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i 's#/\*\(.*\)\\340\(.*\)\*/#/*\1à\2*/#g' monfichier

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Est-ce que la finalité, et la subtilité, est de reprendre dans le commentaire le contenu du "printf" ? Ou pas du tout ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par Ivelios Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i 's#/\*\(.*\)\\340\(.*\)\*/#/*\1à\2*/#g' monfichier
    Chez moi (Ubuntu 12.04), ça ne marche pô!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ echo -e "/* bonjour \0340 vous */" | od -c
    0000000   /   *       b   o   n   j   o   u   r     340       v   o   u
    0000020   s       *   /  \n
    0000025
     
    $ echo -e "/* bonjour \0340 vous */"
    /* bonjour � vous */
     
    $ echo -e "/* bonjour \0340 vous */" | sed 's#/\*\(.*\)\\340\(.*\)\*/#/*\1A\2*/#g'
    /* bonjour � vous */
    De plus, s'il y a plusieurs '\340', ça n'en remplacera (au mieux) qu'un seul!

    Il vaudrait probablement mieux utiliser un sed avec matching... mais j'y arrive pô:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ echo -e "/* bonjour \0340 vous */" | sed '/\/\*.*\*\//s/o/O/g' # Pour voir
    /* bonjour � vous */
     
    $ echo -e "/* bonjour \0340 vous */" | sed '/\/\*\(.\|\\340\)*\*\//s/o/O/g'
    /* bonjour � vous */
    Apparemment, vu où sed insère le 'XXX', '.' ne matche pas le caractère '\340'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo -e "/* bonjour \0340 vous */" | sed '/\/\*.*/s/\(\/\*.*\)/\1XXX/g'
    /* bonjour XXX� vous */

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    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 376
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ od -c ytot
    0000000   /   *       b   o   n   j   o   u   r     340       v   o   u
    0000020   s       *   /  \n
    0000025
    $ LANG=C sed  's/'`echo -e "\0340"`'/à/' ytot
    /* bonjour à vous */
    $ LANG=C sed  's/'`echo -e "\0340"`'/à/' ytot | od -c
    0000000   /   *       b   o   n   j   o   u   r     303 240       v   o
    0000020   u   s       *   /  \n
    0000026

  6. #6
    Membre très actif
    Profil pro
    ingénieur
    Inscrit en
    Novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 165
    Par défaut
    @zipe31: non ça n'est pas la finalité, c'était juste pour illustrer ^^

    @jack-ft: chez moi (redHat 5) la proposition de ivelios fonctionne, mais en effet un seul \340 est matché.

    @disedorgue: désolé, je ne pige pas ta proposition :/

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    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 376
    Par défaut
    Je ne faisais que répondre sur le post de jack-ft

    Plus sérieusement, c'est quoi la finalité ou le problème que tu cherche à résoudre car c'est possible de le faire, mais il faut être conscient que tu vas avoir des fichiers avec des plusieurs charset dans le même fichier.

    Souvent, une simple redéfinition de ton locale suffit pour avoir un affichage correcte.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par tiresias54 Voir le message
    @zipe31: non ça n'est pas la finalité, c'était juste pour illustrer ^^
    Ok et c'est quoi la finalité alors ?

    Remplacer n'importe quoi dans une ligne de commentaire ?
    Remplacer que les codes du style "\340" par leur équivalence ?

    Désolé mais pour moi ton exemple n'est pas très parlant

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

Discussions similaires

  1. Comment faire des remplacements dans des fichiers (sed + regex)
    Par vinok972 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 04/12/2012, 12h50
  2. text dans des blocs
    Par Razorbak dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 12/01/2010, 10h10
  3. [XSL]<b> et </b> dans des blocs if différents ?
    Par Eylir dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/08/2009, 09h56
  4. Recherche dans des blocs maitre/détail
    Par imed0083 dans le forum Forms
    Réponses: 7
    Dernier message: 15/10/2008, 17h26
  5. programme qui plante. chercher/remplacer dans des fichiers.
    Par [Hugo] dans le forum Général Python
    Réponses: 2
    Dernier message: 31/10/2006, 17h10

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