Sed : suppression insensible casse
Salut,
je souhaite effacer toutes les lignes d'un fichier qui ne commencent pas par
Pour cela j'utilise l'expression suivante :
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
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
-
ModérateurSalut,
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'
-
ModérateurSalut,
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" -
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 ;-(
-
Modérateur@jipicyRe,
Il n'y a pas moyen de affiche le contraire desed 's/^\[hkey_local_machine\\system//i' fic
?! -
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 ;-)
-
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
-
-
ContributeurMerci. 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] -
Modérateur
grep -i '^\[HKEY_LOCAL_MACHINE\\SYSTEM' fichier > new_fich
-
Contributeurgrep 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 :)