Sed : suppression insensible casse

Salut,

je souhaite effacer toutes les lignes d'un fichier qui ne commencent pas par

[HKEY_LOCAL_MACHINE\\SYSTEM


Pour cela j'utilise l'expression suivante :

sed "/^\[HKEY_LOCAL_MACHINE\\SYSTEM.*$/!d" fichier


Comment faire pour que cela fonctionne sans respect de la casse ? j'ai tenté avec !di ou encore i!d et il répond fermement " extra characters after command".

Est-il possible d'éviter de dénombrer toutes les combinaisons de caractères du genre [Hh][Kk][Ee][Yy].... ?

Merci
Configuration: Windows XP
Firefox 3.0.5

4 réponses

  1. Modérateur
    Salut,

    Le flag "I" (insensible à la casse) ne s'adapte qu'à la commande de substitution "s" malheureusement.

    Une solution tout de même si c'est ou tout en majuscule ou tout en minuscule :
    sed '/^\(\[HKEY_LOCAL_MACHINE\\SYSTEM\|\[hkey_local_machine\\system\)/!d'

    0
    1. Modérateur
      Salut,

      Le flag "I" (insensible à la casse) ne s'adapte qu'à la commande de substitution "s" malheureusement.

      Ben, en ce cas
      je souhaite effacer toutes les lignes d'un fichier qui ne commencent pas par
      Tu peux le faire en deux étapes :
      - 1ère étape tu utilises s/// pour supprimer les chaînes qui ne commencent pas par ....
      - 2ème étape tu supprimes les lignes vides

      Comme ça il pourra utiliser le flag "i"
      0
    2. Modérateur
      @lami20jSalut,

      Ben non malheureusement toujours pas ;-((

      Il n'y a rien à substituer, seulement effacer les lignes ne correspondant pas au motif (d'où ma seconde proposition avec "grep -i", voir plus bas) et ça "sed" ne sait pas faire simplement ;-(
      0
    3. Modérateur
      @jipicyRe,

      Il n'y a pas moyen de affiche le contraire de
       sed 's/^\[hkey_local_machine\\system//i' fic
      ?!
      0
    4. Modérateur
      @lami20jLe contraire je ne sais (crois) pas, mais en attendant ton idée m'a fait penser à un truc :
      sed -n 's/^\[HKEY_LOCAL_MACHINE\\SYSTEM/&/Ip'
      affiche toutes les lignes commençant par "[HKEY_LOCAL_MACHINE\SYSTEM" quelque soit la casse ;-))

      Merci l'ami lami20j ;-)
      0
    5. Modérateur
      @jipicyTu peux l'écrire dans la FAQ dans tes astuces SED

      Affiche uniquement les lignes correspondant à un motif donné avec insensibilité à la case
      0
  2. Contributeur
    Merci. Malheureusement il pourra s'agir également de
    [HKEY_LOCAL_MACHINE\\SYSTEM
    [HKEY_LOCAL_MACHINE\\System
    [hkey_local_machine\\System
    ...


    donc je crois que ce sera fatalement le schéma [Hh][Kk][Ee][Yy]
    0
    1. Modérateur
      grep -i '^\[HKEY_LOCAL_MACHINE\\SYSTEM' fichier > new_fich

      0
      1. Contributeur
        grep c'est une bonne idée mais ça me contraindrait à l'ajouter avec ses dépendances à un programme qui en réalité est un batch dos

        Mais au moins j'ai la certitude que le non-respect de la casse ne peut se faire avec la commande 'd', c'est déjà ça de pris :)
        0