IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

[BASH - Grep] Tentative pour épurer le parsing d'un listing


Sujet :

Shell et commandes GNU

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 048
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 048
    Points : 14 480
    Points
    14 480
    Par défaut [BASH - Grep] Tentative pour épurer le parsing d'un listing
    Bonjour,

    je suis en train d'essayer de parser ce genre d'information, extraite d'un fichier truetype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    NAME table (at 392)
    	format=0
    	nrecords=21
    	taboff=258
    	 platform=0 plat spec encoding=0 language=0 name=0 Copyright
    	 strlen=120  stroff=60	   ^@�^@ ^@2^@0^@0^@0^@ ^@J^@e^@f^@f^@ ^@L^@e^@e^@ ^@<^@h^@t^@t^@p^@:^@/^@/^@w^@w^@w^@.^@g^@a^@t^@e^@.^@n^@e^@t^@/^@~^@s^@h^@i^@p^@b^@r^@k^@/^@t^@y^@p^@o^@g^@r^@a^@f^@.^@h^@t^@m^@l^@>
    	 platform=0 plat spec encoding=0 language=0 name=1 Family
    	 strlen=22  stroff=191	   ^@J^@S^@L^@ ^@A^@n^@c^@i^@e^@n^@t
    	 platform=0 plat spec encoding=0 language=0 name=2 Subfamily
    	 strlen=12  stroff=219	   ^@I^@t^@a^@l^@i^@c
    	 platform=0 plat spec encoding=0 language=0 name=3 UniqueID
    	 strlen=46  stroff=254	   ^@A^@l^@t^@s^@:^@J^@S^@L^@ ^@A^@n^@c^@i^@e^@n^@t^@ ^@I^@t^@a^@l^@i^@c
    	 platform=0 plat spec encoding=0 language=0 name=4 FullName
    	 strlen=36  stroff=318	   ^@J^@S^@L^@ ^@A^@n^@c^@i^@e^@n^@t^@ ^@I^@t^@a^@l^@i^@c
    	 platform=0 plat spec encoding=0 language=0 name=5 Version
    	 strlen=56  stroff=382	   ^@3^@.^@0^@ ^@M^@o^@n^@d^@a^@y^@,^@ ^@1^@1^@ ^@D^@e^@c^@e^@m^@b^@e^@r^@ ^@2^@0^@0^@0
    	 platform=0 plat spec encoding=0 language=0 name=6 Postscript
    	 strlen=34  stroff=455	   ^@J^@S^@L^@-^@A^@n^@c^@i^@e^@n^@t^@I^@t^@a^@l^@i^@c
    	 platform=1 plat spec encoding=0 language=0 name=0 Copyright
    	 strlen=60  stroff=02000 Jeff Lee <http://www.gate.net/~shipbrk/typograf.html>
    	 platform=1 plat spec encoding=0 language=0 name=1 Family
    	 strlen=11  stroff=180	   JSL Ancient
    	 platform=1 plat spec encoding=0 language=0 name=2 Subfamily
    	 strlen=6  stroff=213	   Italic
    	 platform=1 plat spec encoding=0 language=0 name=3 UniqueID
    	 strlen=23  stroff=231	   Alts:JSL Ancient Italic
    	 platform=1 plat spec encoding=0 language=0 name=4 FullName
    	 strlen=18  stroff=300	   JSL Ancient Italic
    	 platform=1 plat spec encoding=0 language=0 name=5 Version
    	 strlen=28  stroff=354	   3.0 Monday, 11 December 2000
    	 platform=1 plat spec encoding=0 language=0 name=6 Postscript
    	 strlen=17  stroff=438	   JSL-AncientItalic
    	 platform=3 plat spec encoding=0 language=409 name=0 Copyright
             ...
    et avec mes petits neurones épuisés par cette chaleur de fou, j'arrive à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	 strlen=11  stroff=180	   JSL Ancient
    	 strlen=6  stroff=213	   Italic
    	 strlen=23  stroff=231	   Alts:JSL Ancient Italic
    	 strlen=18  stroff=300	   JSL Ancient Italic
    	 strlen=28  stroff=354	   3.0 Monday, 11 December 2000
    	 strlen=17  stroff=438	   JSL-AncientItalic
    en utilisant cat texte | grep -v Copyright | grep platform=1 -A 1 | grep -v Version -A 1 | grep strlen et comme on peut le voir, il reste une ligne (l'avant-dernière) avec une date qui ne m'intéresse pas et pas moyen de l'enlever,

    le grep -v Version enlève bien la ligne Version mais -A 1 ne doit pas être la bonne formule magique pour ôter la ligne suivante...

    Note : la première entrée platform=1 incorpore un point d'interrogation en rendu inversé qui doit éliminer cette ligne sans que je n'aie rien à faire à part préciser -v Copyright, c'est cool.

    Une idée ?
    Merci d'avance,

    Linux/Debian 11.9 64bits

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 320
    Points : 12 878
    Points
    12 878
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/platform=1 .*name=[12346]/{s/.*//;N;s/^\n//;p;}' fichier
    ici, l'idée est on ne garde que la ligne suivante à 'platform=1' ET name égal à 1,2,3,4 ou 6

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 048
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 048
    Points : 14 480
    Points
    14 480
    Par défaut
    Bien joué, camarade, c'est exactement ça dont j'avais besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     sed -n '/platform=1 .*name=[12346]/{s/.*//;N;s/^\n//;p;}' tableau
    	 strlen=11  stroff=180	   JSL Ancient
    	 strlen= 6  stroff=213	   Italic
    	 strlen=23  stroff=231	   Alts:JSL Ancient Italic
    	 strlen=18  stroff=300	   JSL Ancient Italic
    	 strlen=17  stroff=438	   JSL-AncientItalic
    tableau contient les 6 lignes platform=1 suivies de la ligne strlen associée.

    J'étais parti dans un délire avec grep sans voir le bout du tunnel, donc grand bravo à toi et surtout un énorme merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [bash] syntaxe incorrecte pour paramètre de md5sum
    Par AnozerOne dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 17/06/2011, 10h15
  2. Réponses: 1
    Dernier message: 06/05/2010, 17h24
  3. bash,grep tester si un compte existe
    Par nine dans le forum Linux
    Réponses: 2
    Dernier message: 02/02/2010, 11h00
  4. [JSTL] <x:parse doc=" "/> "L'attribut doc est incorrect pour le tag parse"
    Par neoncyber dans le forum Taglibs
    Réponses: 1
    Dernier message: 23/09/2009, 21h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo