Substitutions inter ligne

Résolu
NoviceSed -  
 NoviceSed -
Bonjour,

Voici ce que je voudrai faire

Entrée :
#define toto5 1024
extern UINT32 tab[];

Le but est de récupérer le numéro qui suit toto ainsi que la taille pour les injecter dans la seconde ligne et avoir le résultat suivant :

Sortie :
#define toto5 1024
static UINT32 tab5[1024];

Mon problème est que je ne sais pas comment propager le numéro et la taille à la ligne suivante.
Voilà ma commande actuelle :
/#define toto[0-9]*/ {
s/\(#define toto\([0-9]*\).*\) \
[A-Za-z0-9_]/\1\2/
n
s/extern UINT32 \([A-Za-z0-9_]*\)\(.*\)/ \
static UINT32 \1[]; \
/
}

Pouvez-vous m'aider ?

Par avance merci
Configuration: Windows XP
Firefox 3.0.3

4 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    [tmpfs]$ cat toto
    #define toto5 1024
    extern UINT32 tab[];
    
    #define toto4 512
    extern UINT32 tab[];
    
    #define toto6 2048
    extern UINT32 tab[];
    
    [tmpfs]$ sed '/^#define/{
    h
    s/[^0-9]*\([0-9]*\)/\1/
    N
    s/\([^ ]*\) \([^\n]*\)\(.*\)\(\[\)\(\]\).*/\3\1\4\2\5;/
    H
    g
    s/\n//
    }' toto
    
    #define toto5 1024
    extern UINT32 tab5[1024];
    
    #define toto4 512
    extern UINT32 tab4[512];
    
    #define toto6 2048
    extern UINT32 tab6[2048];
    [tmpfs]$
    ;-))
    0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,
    $ cat define
    #define toto5 1024
    extern UINT32 tab[];
    
    #define toto4 512
    static UINT32 tab[];
    
    #define toto6 2048
    extern UINT32 tab[];
    
    $ perl -ne '($x,$y)=/(\d+)\s(\d+)/ if/#def/;s/\[]/${x}[$y]/;print' define
    #define toto5 1024
    extern UINT32 tab5[1024];
    
    #define toto4 512
    static UINT32 tab4[512];
    
    #define toto6 2048
    extern UINT32 tab6[2048];
    

    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    Ou
    $ cat define
    #define toto5 1024
    extern UINT32 tab[];
    
    #define toto4 512
    static UINT32 tab[];
    
    #define toto6 2048
    extern UINT32 tab[];
    
    $ perl -ne '/#def/?($x,$y)=/(\d+)\s(\d+)/:s/\[/${x}[$y/;print' define
    #define toto5 1024
    extern UINT32 tab5[1024];
    
    #define toto4 512
    static UINT32 tab4[512];
    
    #define toto6 2048
    extern UINT32 tab6[2048];

    0
  4. NoviceSed
     
    Salut,

    Merci pour vos réponses :).
    J'ai gardé la solution de jipicy car je suis obligé d'utiliser sed.

    Problème résolu donc.

    Bonne journée a tous
    0