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

Linux Discussion :

Grep, regexp, windowsupdate et base de regitre


Sujet :

Linux

  1. #1
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut Grep, regexp, windowsupdate et base de regitre
    Bonjour.

    J'essaie de faire à la main un script de windows update via le réseau.

    J'ai téléchargé plein de hotfixes, j'ai les lignes de commandes qui vont bien pour les installer ...

    Je voudrais exploiter la base de registre de windows pour savoir les hotfixes déjà installés. J'exporte donc les données de la base de registre qui m'intéressent.

    je me retrouve avec un fichier comme ça :
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB890046]
    "Installed"=dword:00000001
    "Comments"="Correctif Windows 2000 - KB890046"
    "Backup Dir"=""
    "Fix Description"="Correctif Windows 2000 - KB890046"
    "Installed By"=""
    "Installed On"=""
    "Service Pack"=dword:00000005
    "Valid"=dword:00000001

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB890046\File 1]
    "Flags"=""
    "New File"=""
    "New Link Date"=""
    "Old Link Date"=""

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB893756]
    "Installed"=dword:00000001
    "Comments"="Correctif Windows 2000 - KB893756"
    "Backup Dir"=""
    "Fix Description"="Correctif Windows 2000 - KB893756"
    "Installed By"=""
    "Installed On"=""
    "Service Pack"=dword:00000005
    "Valid"=dword:00000001

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB893756\File 1]
    "Flags"=""
    "New File"=""
    "New Link Date"=""
    "Old Link Date"=""

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB896358]
    "Installed"=dword:00000001
    "Comments"="Correctif Windows 2000 - KB896358"
    "Backup Dir"=""
    "Fix Description"="Correctif Windows 2000 - KB896358"
    "Installed By"=""
    "Installed On"=""
    "Service Pack"=dword:00000005
    "Valid"=dword:00000001"
    Mon but est d'obtenir une liste avec que des KB?????? (où ? est un digit)

    Déjà rien qu'avec ce fichier, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etienne@info1:~/shelltest/windowsupdate/hotfixes $ cat hotfix.unix.reg | grep HKEY
    Rien qui sort
    ok je me dis, peut être qu'il interprète le fichier comma binaire ou je ne sais quoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etienne@info1:~/shelltest/windowsupdate/hotfixes $ cat hotfix.unix.reg | grep -a HKEY
    Rien qui sort

    Admettons ...

    J'arrive à diminuer la taille de mon fichier en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat hotfix.unix.reg | grep -a []]

    Après j'essaie d'un peu surcharger tout ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    etienne@info1:~/shelltest/windowsupdate/hotfixes $ cat hotfix.unix.reg | grep -a []] | grep -E [:digit:]{6}
    etienne@info1:~/shelltest/windowsupdate/hotfixes $ cat hotfix.unix.reg | grep -a []] | grep -aE [:digit:]{6}
    etienne@info1:~/shelltest/windowsupdate/hotfixes $ cat hotfix.unix.reg | grep -a []] | grep -aE [[:digit:]]{6}
    Rien ne sort

    J'obtiens de meilleurs résultats (pour la validité de mes regexp) avec sed qu'avec grep ...

    Je sens l'appel du perl, mais avant le plonger dans perl, j'aimerai bien comprendre.

    Merci d'avance.

  2. #2
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Salut

    Déjà rien qu'avec ce fichier, je fais :
    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etienne@info1:~/shelltest/windowsupdate/hotfixes $ cat hotfix.unix.reg | grep HKEY
    Rien qui sort
    Pas très très normal ca ... Tu le sort d'où ton grep ?
    (ca peut être un alias un peu méchant....)

  3. #3
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ which grep
    /bin/grep
    Rien de méchant a priori.

    Je pensais que ces erreurs venaient peut être du fait que le fichier vienne de windows. Il y a peut être des différences d'encodage qui envoient grep "à moules".

    J'ai pompé un script, sur le web, qui transforme les \r\n en \n pour aller bien sous linux.

    dos2unix.pl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/usr/bin/perl -pi
    s/\r\n/\n/;
    Autre chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ file hotfix.reg
    hotfix.reg: MPEG ADTS, layer I, v1, 160 kBits, 48 kHz, Stereo
    Le fichier d'export du registre a une empreinte de MPEG
    Il faut donc bien que je le traite avec le -a comme option pour grep...
    C'est rien qu'un fichier texte

  4. #4
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    ^@^@H^@K^@E^@Y^@_^@L^@O^@C^@A^@L^@_^@M^@A^
    @C^@H^@I^@N^@E^@\^@S^@O^@F^@T^@W^@A^@R^@E^@\^@M^
    @i^@c^@r^@o^@s^@o^@f^@t^@\^@W^@i^@n^@d^@o^@w^@s^@
    ^@N^@T^@\^@C^@u^@r^@r^@e^@n^@t^@V^@e^@r^@s^@i^@o^
    @n^@\^@H^@o^@t^@F^@i^@x^@^@^M^@
    C'est quoi cet encodage ?
    Quand j'ouvre avec vi, ça me donne ça... comprends pas

    Le fichier d'origine est très bien, mais c'est après avoir utilisé grep -a, que je me retrouve avec cette infamie.

    Citation Envoyé par man grep
    If TYPE is text, grep processes a binary file as if it were
    text; this is equivalent to the -a option. Warning: grep
    --binary-files=text might output binary garbage, which can have
    nasty side effects if the output is a terminal and if the termi-
    nal driver interprets some of it as commands.

  5. #5
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Alors pour finir

    le fichier d'export .reg est bien windowsien, donc il convient de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat export.reg | col -b > monBONfichier.reg
    et puis au début du fichier, on a :
    ÿþWindows

    Donc un bon nettoyage de printemps, et après ça roule... mieux.

    Ce qui est 'marrant', c'est que vi ouvre ce fichier sans rien montrer lors de la première ouverture, comme si c'était un type connu, et qu'il fallait caché certains caractères.

    Zarb.

  6. #6
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Bah, les conf par defaut ont souvent des choses genre ca sous linu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    autocmd BufRead * silent! %s/^M$//
    Ca facilite la vie, mais c'est traitre !

  7. #7
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par Smortex
    Bah, les conf par defaut ont souvent des choses genre ca sous linu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    autocmd BufRead * silent! %s/^M$//
    Ca facilite la vie, mais c'est traitre !
    Je vais dire d'accord, mais je bitte que dalle

  8. #8
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    En décodé, ca veut dire "Lorsque je charge un fichier, tu remplace a la volée tous les ^M (\r de DOS) en fin de ligne par rien"... En bref, ils sont pas affichés

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

Discussions similaires

  1. [HP-UX 11i] grep avec regexp
    Par rafuoner dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 19/01/2012, 11h46
  2. [RegExp] Controler un nom de base de données
    Par seb.49 dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 22/09/2010, 11h07
  3. Problème avec grep et regexp
    Par redvivi dans le forum Linux
    Réponses: 10
    Dernier message: 16/08/2008, 16h41
  4. Grep, Regexp et variables
    Par 84mickael dans le forum Linux
    Réponses: 6
    Dernier message: 25/07/2007, 17h39
  5. petit probleme à base de regexp
    Par absolut75 dans le forum Langage
    Réponses: 10
    Dernier message: 13/04/2006, 08h45

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