Bonjour !
Moi aussi j’essaie de faire des modifications à l’aide de la commande sed !
Dans environs une centaine de fichiers je dois substituer des expressions de ce type :
1 2 3
| CALL MICHU(ZERO, XUSE , NCL*15 )
[oubien]
CALL MICHU( -ONE, DAXDR , MMS ) |
[…]
En gros, des éléments ayant la forme suivante :
CALL MICHU(BLOC_1,BLOC_2,BLOC_3)
En l’expression suivante :
BLOC_2(1:BLOC_3) = BLOC_1
CALL MICHU(BLOC_1,BLOC_2,BLOC_3) -> BLOC_2(1:BLOC_3) = BLOC_1
Je sais que c’est réalisable avec sed, mais je n’ai pas réussi à trouver la syntaxe pour organiser à ma guise les différents blocs.
J’ai plusieurs centaines d’occurrence à traiter et je sais que je devrais probablement terminer certaines expressions sans la commande sed … mais peut-être que si j’arrive à la comprendre suffisamment …
En faite, 90% de mes expressions ont cette forme :
1 2 3 4
| CALL MICHU(BLOC_1,BLOC_2,BLOC_3)
|
V
BLOC_2(1:BLOC_3) = BLOC_1 |
Et … ensuite j’anticipe deux types d’occurrences difficiles :
J’ai des :
IF( IBBK==2 ) CALL MICHU(0.0D0,T,IJF*KKFD )
C’est à dire :
IF( IBBK==2 ) CALL MICHU(BLOC_1,BLOC_2,BLOC_3)
Qu’il me faudra transformer en :
IF( IBBK==2 ) T(1,IJF*KKFD) = 0.0D0
C’est à dire :
IF( IBBK==2 ) BLOC_2(1:BLOC_3) = BLOC_1
Bon après j’ai quelques expressions vraiment hardcore du type :
CALL MICHU ( 0.0D0, QS(1,1,1), (IT+2)*(JT+2)*(KT+2) )
Que je devrais transformer en …
QS(1: (IT+2)*(JT+2)*(KT+2),1,1) = 0.0D0
mais … ça c’est une autre histoire … et je crois qu’il ne vaut mieux pas en parler …. (Surtout que … ce sont des expressions FORTRAN … je pense que au final la forme pourrait être encore autre chose ... )
Merci :-*
Partager