Substitutions inter ligne

Résolu/Fermé
NoviceSed - 2 déc. 2008 à 19:18
 NoviceSed - 3 déc. 2008 à 11:30
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
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
2 déc. 2008 à 20:05
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
2 déc. 2008 à 20:22
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
2 déc. 2008 à 22:27
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
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