Substitutions inter ligne

Résolu
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. 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
    1. Modérateur
      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];

      1. Modérateur
        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];
        

        1. Modérateur
          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]$
          ;-))