Sed : suppression insensible casse

eZula Messages postés 3391 Date d'inscription   Statut Contributeur Dernière intervention   -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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

4 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
Salut,

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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Re,

Il n'y a pas moyen de affiche le contraire de
 sed 's/^\[hkey_local_machine\\system//i' fic
?!
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
Le 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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Tu peux l'écrire dans la FAQ dans tes astuces SED

Affiche uniquement les lignes correspondant à un motif donné avec insensibilité à la case
0
eZula Messages postés 3391 Date d'inscription   Statut Contributeur Dernière intervention   392
 
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
grep -i '^\[HKEY_LOCAL_MACHINE\\SYSTEM' fichier > new_fich

0
eZula Messages postés 3391 Date d'inscription   Statut Contributeur Dernière intervention   392
 
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