[Shell-script] supprimer partie de texte

Résolu/Fermé
Phil - 6 juin 2007 à 09:21
jipicy
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
- 7 juin 2007 à 09:14
Bonjour à tous !
J'ai plusieurs fichiers se présentant comme ceci :
BEGIN GSE2.0
MSG_TYPE DATA
MSG_ID 040119223052 EMSC
DATA_TYPE BULLETIN GSE2.0

EVENT 20040119223052
   Date       Time       Latitude Longitude    Depth    Ndef Nsta Gap  Author         
       rms   OT_Error      Smajor Sminor Az        Err   mdist  Mdist    

2004/01/19 22:30:58.0     33.9620  -14.8260     10.0 f    22   12 177    INMG       
      0.30   +-  1.94      13.2    4.7  120               1.55   8.71  

2004/01/19 22:30:58.7     33.9961  -14.8244     33.0      59   43 151     MDD     
      0.92   +-  0.70      13.7    5.9  126               1.57  10.45 

2004/01/19 22:31:02.8     34.2300  -14.4600     30.0      18    9 318    CNRM    
                                                          4.89   8.52                           

2004/01/19 22:30:50.7     34.3095  -15.4805      0.0      19   16 188     MDD      
      1.18   +-  1.58      19.4   10.4  105               5.85  10.27  

2004/01/19 22:30:54.4     34.0390  -14.9970     10.0      52   28 214    NEIC     
      1.16                 11.8    7.0                    5.66  16.76   

2004/01/19 22:31:06.9     34.7125  -14.6205     10.0 f    12    8 336     LDG      
      0.55   +-  0.69      21.8   10.9  156               6.46  16.15  

2004/01/19 22:30:51.7     34.1361  -15.0856     10.0 f    60   51 193    EMSC     
      1.02   +-  0.18       4.3    2.1   87               1.50  16.83  
(...)


(...) Signifie que le fichier n'est pas fini, mais le reste de celui-ci ne m'intéresse pas.

Je voudrais effacer toutes les lignes allant de la première occurance de "2004" jusqu'à la dernière. En conservant le début du fichier et la fin.

dans mon exemple cela donnerait :
BEGIN GSE2.0
MSG_TYPE DATA
MSG_ID 040119223052 EMSC
DATA_TYPE BULLETIN GSE2.0

EVENT 20040119223052
   Date       Time       Latitude Longitude    Depth    Ndef Nsta Gap  Author         
       rms   OT_Error      Smajor Sminor Az        Err   mdist  Mdist    

2004/01/19 22:30:51.7     34.1361  -15.0856     10.0 f    60   51 193    EMSC     
      1.02   +-  0.18       4.3    2.1   87               1.50  16.83  
(...)

je suis novice en script et je ne trouve pas dans les différents man comment réaliser cette action.
Si quelqu'un à une idée....

Merçi d'avance.

Phil

3 réponses

Je viens de tester le commande :
sed '/2004/,/2004/d' mon_fichier > nouveau_fichier

Je pensais que ça allait effacer les lignes comprisent entre ces deux motifs. Mais ça efface toutes celles comprenant le motif "2004".

Phil.
0
jipicy
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 juin 2007 à 11:01
Salut,

Essaie ça :
 sed  '/^2004/ {/EMSC[ ]*$/!{N;N;d}}' fichier
En espérant qu'il ne faille garder que la ligne se finissant par "EMSC".
Si c'est le résultat escompté, rajoute l'option "-i.bak" si ta version de "sed" le permet (> 4.0), pour modifier le fichier d'entrée, sinon passe par un fichier temporaire...
0
Merçi Jipicy, ta solution marche vraiment bien. J'avais, en fait, trouvé une autre solution mais elle est beaucoup plus lourde que la tienne, Je réalisais la même chose que toi mais partie par partie puis je réunissais ce qui m'interressais...Vraiment moins jolie qu'avec ta soluce.

Merçi et à plus.
0
jipicy
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
7 juin 2007 à 09:14
De rien ;-))
0